Python的文件操作

2019-07-24 09:16:56来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1、初始文件操作

  1、使用python读写文件使用open()函数获取文件句柄,就可以操作文件了,根据打开方式不同能执行的操作也不同。

打开方式有:
    r、w、a、r+、w+、a+、rb、wb、ab、r+b、w+b、a+b,默认用的是r模式

  2、只读操作(r、rb)

    2.1、只读模式r

#文件的路径分隔符使用/,在windows下和linux都可以生效
f = open("C:/Users/18811/Desktop/部署用到的地址.txt",mode="r",encoding="ANSI")
content = f.read()
f.close()

    2.2、只读模式rb,下面rb的方式用于读取非文本文件时,如MP3、图像、视频等,这种文件无法直接显示,rb模式下不能选择encoding

f = open("aa.mp3",mode="rb")
content = f.read()
f.close()

  3、读取文件的方法

read(n)读取n个字符,如果再次读取会从当前位置继续读取,不会从头读取,如果是rb模式下,则会读取第n个字节
read()将读取全部内容,弊端:占内存,如果文件过大,容易使内存崩溃
readLine()取一行数据,但每次结尾都有\n或空格,所以要用strip()方法去掉
readLines()将每一行形成一个元素,放到一个列表中,但此方法也会极大耗内存,故不推荐

#最好的读取方式,循环读取不会占内存
f = open("C:/Users/18811/Desktop/部署用到的地址.txt",mode="r",encoding="ANSI")
for i in f:
    print(i.strip("\n"))
f.close()

  4、写模式(w、wb)

    4.1、写的时候,如果没有文件,会创建文件,如果文件存在,则会将原文件内容删除,再重新写入新的内容

f = open("C:/Users/18811/Desktop/你好.txt",mode="w",encoding="UTF-8")
f.write("你好,我是新搬家的阿里\nNICE TO MEET YOU!")
f.flush()
f.close()

    4.2、wb模式,可以不指定打开文件的编码,但写文件时,必须将字符串转成UTF-8的bytes数据

f = open("?小娃娃", mode="wb")
f.write("?金金?毛狮王".encode("utf-8"))
f.flush()
f.close()

  5、追加模式(a、ab)

    5.1、追加模式下,写入的内容会追加到文件的结尾,追加模式下,如果没有文件也会先创建

f = open("C:/Users/18811/Desktop/你好.txt",mode="a",encoding="UTF-8")
f.write("你好,我是新搬家的阿里\n我很喜欢你")
f.flush()
f.close()

    5.2、rb模式下

f = open("C:/Users/18811/Desktop/你好.txt",mode="ab")
f.write(b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe6\x88\x91\xe6\x98\xaf')
f.flush()
f.close()

  6、读写模式(r+、r+b),对于读写模式, 必须是先读, 因为默认光标是在开头的, 准备读取的, 当读完了之后再进行写入, 我们以后使用频率最高的模式就是r+

f = open("?小娃娃", mode="r+", encoding="utf-8")
content = f.read()
f.write("麻花藤的最爱")
print(content)
f.flush()
f.close()
#结果:正常的读取之后, 写在结尾
#注意r+模式下. 必须是先读取. 然后再写入

  7、写读(w+, w+b),先将所有的内容清空,然后写入,最后读取,但是读取的内容是空的, 不常用

f = open("?小娃娃", mode="w+", encoding="utf-8")
f.write("哈哈")
content = f.read()
print(content)
f.flush()
f.close()

  8、追加读(a+),a+模式下, 不论先读还是后读. 都是读取不到数据的.

f = open("?小娃娃", mode="a+", encoding="utf-8")
f.write("?马化腾")
content = f.read()
print(content)
f.flush()
f.close()

  9、其他的一些方法

1、seek(n) 光标移动到n位置, 注意, 移动的单位是byte. 所以如果是UTF-8的中文部分要是3的倍数.
移动到开头: seek(0)
移动到结尾: seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移, 默认是0, 表
示开头, 1表示当前位置, 2表示结尾

2、tell()方法 使用tell()可以帮我们获取到当前光标在什么位置

3、truncate() 截断文件,删掉光标后面的所有内容
深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入或者操作文件的时候都是在结尾进行的操作.
所以如果想做截断操作,记住了, 要先挪动光标,挪动到你想要截断的位置,然后再进行截断关于truncate(n), 如果给出了n. 则从开头进行截断, 如果不给n, 则从当前位置截断. 后面的内容将会被删除

  10、修改文件以及另一种打开文件的方式,文件修改: 只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字

import os
with open("小娃娃", mode="r", encoding="utf-8") as f1,\
  open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
    for line in f1:
      new_line = line.replace("大白梨", "冰糖葫芦")
      f2.write(new_line)
os.remove("小娃娃") # 删除源?文件
os.rename("小娃娃_new", "小娃娃") # 重命名新?文件

 


原文链接:https://www.cnblogs.com/jknote/p/11150009.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python的比较关系运算符和逻辑运算符

下一篇:python的数据类型之字符串(一)