文件的使用

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\nworld2") 如果没有文件就创建一个文件,写的内容进行覆盖

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方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

 





                                                          


 

posted @ 2017-04-22 20:56  shy车队破风手  阅读(195)  评论(0编辑  收藏  举报