python文件操作

来源:互联网 发布:mac口红cb96好看吗 编辑:程序博客网 时间:2024/05/18 19:38
r+具有读写属性,文件必须存在否则报错,以r+打开文件不会清空文件,读取从头读取,写入从读取截止的地方开始写,A:如果打开的文件没有读取直接写入内容,那么就是从头开始写;B:如果打开的源文件有内容,从读取到的位置开始写,B-1:如果没有读取直接写,那么新写的内容就是从头开始写入,源文件以前的内容就在新写的内容后面后面、B-2:如果打开源文件有内容先读取了内容,在写入新内容,写入开始的位置就是从读取结束的位置开始写入w+具有读写属性,文件不存在创建,以w+打开文件时候直接清空(因为一打开就是清空,所以read不到数据)文件中的内容,从头开始写。 r 以只读方式文件,该文件必须存在。 r+ 以读写方式打开可读写的文件,写的放是见上面,该文件必须存在。 w 打开只写文件,不能读(调用read方法直接报错),若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,可读可写,若文件存在则文件长度清为零(调用read方法不会报错,但调用read方法也读不到消息,都清空了),即该文件内容会消失。若文件不存在则建立该文件。 
(其实w与w+区别可以理解为,调用w调用read报错,w+调用read不报错,其他都一样)
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+ 以附加方式打开可读写的文件,(打开文件时候指针指导文件末尾,直接读取读取不到内容,要将指针指到文件头,w+是直接清空文件,指针在文件最头部)若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。
      fo = open('test.txt','w+')
      fo,tell()//获取指针位置
      fo.seek(0,0) / /指定指针位置
      fo.write('ddddddddddd')//写入
       fo.writelines(['aaa','bbb','ccc'])
       fo.read(5)//读5个字节,不写5 读全部
       fo.readline()//一下读一行
       fo.readlines()//吧所有内容读到一个数组,一行一个
       fo.close() 



1、打开、关闭文件
   f = open('/Users/michael/gbk.txt', 'r', encoding='gbk',errors='ignore') 
   open第三个参数是编码,
 encoding='gbk',都文本文件不需要传,非文本文件需要穿
          第四个参数是遇到编码错误忽略它,errors='ignore',因为在文本文件中可能夹杂了一些非法编码的字符
   方法一:一般写法
     
try: 
         f = open('/path/to/file', 'r') 
         print(f.read())
     finally: 
        if f:
             f.close()
 方法二:简写(不需要写close,with默认会调用)
    
with open('/path/to/file', 'r') as f: 
        print(f.read()) 

2、内存读写
2.1 :
 StringIO只能读写字符串
写:
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world')
print(f.getvalue())
读取:
f = StringIO('hello\nniubi\nworld')
while True:
    s = f.readline()
    if s == '':
        break;
    print(s.strip())
 
2.2 BytesIO 操作流
 from io import BytesIO
f = BytesIO()
f.write('牛逼'.encode('utf-8'))
#请注意,写入的不是 str,而是经过 UTF-8 编码的 bytes。
print(f.getvalue())

和 StringIO 类似,可以用一个 bytes 初始化 BytesIO,然后,像读文件一样读取:
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
f.read()
原创粉丝点击