码迷,mamicode.com
首页 > 编程语言 > 详细

python 基础 day3

时间:2018-04-26 23:35:08      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:python 文件操作

python 操作文件的常用方式有如下

读文件:r 模式
实例演示1:
f1 = open(file=‘D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt‘,mode=‘r‘,encoding=‘utf-8‘) # 以 r 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取

data = f.read() # 读取文件,表示读取所有内容

f.close() # 关闭文件

实例演示2:
f2 = open(file=‘D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt‘,mode=‘rb‘,encoding=‘utf-8‘) # 以 rb 二进制 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取

data = f.read() # 读取文件,表示读取所有内容

f2.close() # 关闭文件

示例2和示例1的区别在哪?

答:在于示例2打开文件时并未指定encoding,这是为何?是因为直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,如果想内容,还需要手动decode,因此在文件打开阶段,不需要指定编码

循环遍历文件:

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
按指定长度截断文件
指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

python 基础 day3

标签:python 文件操作

原文地址:http://blog.51cto.com/sdsca/2108322

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!