Python-21 文件

来源:互联网 发布:拍照测颜值软件 编辑:程序博客网 时间:2024/05/17 21:58

文件

使用open()函数,打开文件并返回文件对象。可以使用 help(open),来查看open函数的说明。

>>> help(open)Help on built-in function open in module io:open(...)    open(file, mode='r', buffering=-1, encoding=None,         errors=None, newline=None, closefd=True, opener=None) -> file object


关于文件打开模式参数的说明

   打开模式                                  执行操作                             'r'以只读方式打开文件(默认)'w'
以写入的方式打开文件,会覆盖已存在的文件件    'x'
如果文件已经存在,使用此模式打开将引发异常'a
以写入模式打开,如果文件存在,则在末尾追加写入     'b'
以二进制模式打开文件't'
以文本模式打开(默认)'+'
可读写模式(可添加到其他模式中使用)'U'
通用换行符支持

>>> f = open('E:\\record.txt')>>> f<_io.TextIOWrapper name='E:\\record.txt' mode='r' encoding='cp936'>>>> 


文件对象方法

   文件对象方法           执行操作        f.close()关闭文件 f.read([size=-1])从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的
所有字符,然后作为字符串返回
f.readline([size=-1])   

从文件中读取并返回一行(包括行结束符),果有size有定义则返回size个字符

f.write(str)将字符串str写入文件f.writelines(seq)向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象f.seek(offset,from)在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节f.tell()返回当前在文件中的位置f.truncate([size=file.tell()])          截取文件到size个字节,默认是截取到文件指针当前位置

>>> f = open("E:\\record.txt")>>> f<_io.TextIOWrapper name='E:\\record.txt' mode='r' encoding='cp936'>>>> f.read()'我常想在纷扰中寻出一点闲静来,然而委实不容易。目前是这么离奇,心里是这么芜杂。\n一个人做到只剩了回忆的时候,生涯大概总要算是无聊了罢,但有时竟会连回忆也没有。\n中国的做文章有轨范,世事也仍然是螺旋。\n前几天我离开中山大学的时候,便想起四个月以前的离开厦门大学;\n听到飞机在头上鸣叫,竟记得了一年前在北京城上日日旋绕的飞机。\n我那时还做了一篇短文,叫做《一觉》。现在是,连这“一觉”也没有了。'>>> 

再读的话,只是一个空字符串,说明已经指向了文件的末尾。

>>> f.read()''>>> 

文件指针

>>> f = open("E:\\record.txt")>>> f.read(5)'我常想在纷'>>> f.tell()10>>> 

>>> f.seek(20,0)20>>> f.readline()'点闲静来,然而委实不容易。目前是这么离奇,心里是这么芜杂。\n'>>> 


list(f) 直接转为列表
>>> list(f)['一个人做到只剩了回忆的时候,生涯大概总要算是无聊了罢,但有时竟会连回忆也没有。\n', '中国的做文章有轨范,世事也仍然是螺旋。\n', '前几天我离开中山大学的时候,便想起四个月以前的离开厦门大学;\n', '听到飞机在头上鸣叫,竟记得了一年前在北京城上日日旋绕的飞机。\n', '我那时还做了一篇短文,叫做《一觉》。现在是,连这“一觉”也没有了。']>>> 

迭代读取文本中的每一行,但这样的效率不高

>>> line = list(f)>>> for each_line in line:print(each_line)我常想在纷扰中寻出一点闲静来,然而委实不容易。目前是这么离奇,心里是这么芜杂。一个人做到只剩了回忆的时候,生涯大概总要算是无聊了罢,但有时竟会连回忆也没有。中国的做文章有轨范,世事也仍然是螺旋。前几天我离开中山大学的时候,便想起四个月以前的离开厦门大学;听到飞机在头上鸣叫,竟记得了一年前在北京城上日日旋绕的飞机。我那时还做了一篇短文,叫做《一觉》。现在是,连这“一觉”也没有了。>>> 


可以直接迭代f,Python是不是很灵活!!!,这样效率会比较高,也是官方文档推荐的方式

>>> f.seek(0,0)0>>> for each_line in f:print(each_line)我常想在纷扰中寻出一点闲静来,然而委实不容易。目前是这么离奇,心里是这么芜杂。一个人做到只剩了回忆的时候,生涯大概总要算是无聊了罢,但有时竟会连回忆也没有。中国的做文章有轨范,世事也仍然是螺旋。前几天我离开中山大学的时候,便想起四个月以前的离开厦门大学;听到飞机在头上鸣叫,竟记得了一年前在北京城上日日旋绕的飞机。我那时还做了一篇短文,叫做《一觉》。现在是,连这“一觉”也没有了。>>> 

文件的写入

写入文件,要确保打开文件的参数中带有‘w’或‘a’

现在试图用之前的f来写入字符,出现io异常,不是可写的状态

>>> f.write('china')Traceback (most recent call last):  File "<pyshell#25>", line 1, in <module>    f.write('china')io.UnsupportedOperation: not writable>>> 

现在以‘w’的方式,打开一个不存在的文件,会自动创建一个对应的文件

>>> f = open('E:\\test.txt','w')>>> f.write('shenzhen')8>>> 
返回写入字符数。

>>> f.close()>>> 
写完之后,要有close(),才会写入文件中。