python 操做文件的经常使用方式有以下python
读文件:r 模式
实例演示1:
f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='r',encoding='utf-8') # 以 r 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取ide
data = f.read() # 读取文件,表示读取全部内容编码
f.close() # 关闭文件code
实例演示2:
f2 = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='rb',encoding='utf-8') # 以 rb 二进制 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取内存
data = f.read() # 读取文件,表示读取全部内容utf-8
f2.close() # 关闭文件unicode
示例2和示例1的区别在哪?字符串
答:在于示例2打开文件时并未指定encoding,这是为什么?是由于直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,若是想内容,还须要手动decode,所以在文件打开阶段,不须要指定编码it
循环遍历文件:字符编码
f = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='r',encoding='utf-8') #
for line in f:
print(line)
f.close()
写文件:w 模式
实例演示1:
f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='w',encoding='utf-8') # 以 w 的 模式,打开指定路径的文件 ,按照utf-8 的方式去写
data = f.write(“.....”) # 写入指定的文件
f.close() # 关闭文件
实例演示2:
f2 = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='rb',encoding='utf-8') # 以 wb 二进制 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取
data = f.write(“.....”) # 写入指定的文件
f2.close() # 关闭文件
提示:文件以w 或者 wb 的方式去操做的时候,会清空原有的文件,
wb,写入时须要直接传入以某种编码的0100101,即:字节类型
w 和 encoding,写入时须要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010
追加文件:a模式
f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操做\staff_table.txt',mode='a',encoding='utf-8') # 以 w 的 模式,打开指定路径的文件 ,按照utf-8 的方式去写
data = f.write(“\n11,Kevin Chen,22,13151054603,Sales,2013-04-01”) # 写入指定的文件
f1.close() # 关闭文件
文件操做时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容
写入到硬盘上时,必须是某种编码的0101010,打开时须要注意:
ab,写入时须要直接传入以某种编码的0100101,即:字节类型
a 和 encoding,写入时须要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010
读写模式:r+
f1 = open("beiying2.txt", "r+",encoding="utf-8") # 以读写的方式打开文件
data = f1.read() # 读取文件
print(data)
f1.write("\n first line") # 在文件的末尾追加文件
f1.close() # 关闭文件
写读模式:w+
f1 = open("beiying.txt", "w+", encoding="utf-8")
data = f1.read()
print(data)
f1.write("line 1")
f1.write("\nline 2")
f1.write("\nline 3")
f1.write("\nline 4")
f1.close()
w+会先把文件清空,再写新内容,相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容
文件操做的其余方式:
def flush(self, *args, **kwargs): # real signature unknown
把文件从内存buffer里强制刷新到硬盘
def seek(self, *args, *kwargs): # real signature unknown
把操做文件的光标移到指定位置
注意seek的长度是按字节算的, 字符编码存每一个字符所占的字节长度不同。
如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,所以以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
但若是是utf8,seek(4)会致使,拿到了飞这个字的一部分字节,打印的话会报错,由于处理剩下的文本时发现用utf8处理不了了,由于编码对不上了。少了一个字节
def tell(self, *args, **kwargs): # real signature unknown
返回当前文件操做光标位置
def truncate(self, *args, *kwargs): # real signature unknown按指定长度截断文件指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。