python3读取指定编码的文件
f=open("test") #windows操作系统的默认解码是GBK,linux的操作系统的默认解码方式utf8 f=open("test",encoding="utf8") #默认读模式 f.truncate() #清空原文件 f.flush() #将内存的内容强制刷新进文件
python2中读取GBK文件
with open('test.txt', mode='rb') as f: for row in f: print row.decode("GBK")
buffering缓冲参数,仅允许在二进制模式下,则0表示无缓冲,1表示行
缓冲,较大的数字指定缓冲区大小。
打开文件的模式有:
- r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
- w,只写模式【不可读;不存在则创建;存在则清空内容】
- x, 只写模式【不可读;不存在则创建,存在则报错】
- a, 追加模式【可读; 不存在则创建;存在则只追加内容】
"+" 表示可以同时读写某个文件
- r+, 读写【可读,可写】
- w+,写读【可读,可写】
- x+ ,写读【可读,可写】
- a+, 写读【可读,可写】
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
print line,读取文件时,python2.7去掉换行
print(line,end=' ')读取文件时,python3.6去掉换行
--------------------读操作
data=f.read(5)# python3读指定个数的字符,python2读取指定个数的字节
data2=f.read(5) #从光标位置读指定个数的字符,date读取后光标已经移动到5个字符
data=f.readline() #读取光标的那一行
data=f.readlines() #读所有的行,结果是列表结果
调用read()
会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。另外,调用readline()
可以每次读取一行内容,调用readlines()
一次读取所有内容并按行返回list
。因此,要根据需要决定怎么调用。
如果文件很小,read()
一次性读取最方便;如果不能确定文件大小,反复调用read(size)
比较保险;如果是配置文件,调用readlines()
最方便。
f = open('11.txt', 'r')
for line in f.readlines(): print(line.strip()) for line in f: # 推荐使用,优化内存,可迭代对象(字符串,列表,字典,元组,文件) print(line.strip())
with open('11.txt','r') as f:
for line in f:
print line
--------------------写操作
f=open("test3",mode="w",encoding="utf8")
print(f.read()) #不可读
f.write("yyyy
world2") 如果没有文件就创建一个文件,写的内容进行覆盖
f.write("world2") #向文件内写内容
--------------------flush操作
f.write("hellp test5") #先放在缓存,最后一起存入磁盘
f.flush() #将缓存的内容立即存入磁盘
可读可写模式 r+ w+ a+
r+模式是追加写
w+先覆盖,再写入以后才能读出
f.seek(0) #将光标移动到最前面,seek按字节走
f.seek(5) #将光标移到开始位置,不同于read()方法,它是按字节移动的
print(f.tell())#显示当前光标的位置
f.seek(3,0) #将光标移到开始位置,不同于read()方法,它是按字节移动的,0从头开始
f.seek(-3,2) #将光标移到开始位置,不同于read()方法,它是按字节移动的,2从末尾开始
f.seek(1,1) #1从当前位置开始
a+ 先总是在最后位置添加,不覆盖
f.seek(0) #无论光标在任何位置,追加的内容都在最后位置添加
------------总结w:覆盖写 a:追加写
r+:默认光标在开始位置, 写的追加写
w+:覆盖写,想读取内容:seek调整
a+: 光标默认在文件最后位置,不管光标位置,一定是追加写;想读取内容:seek调整
seek的应用,比如断点续传
-------- rb wb ab 二进制操作
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码