文件
使用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)
['一个人做到只剩了回忆的时候,生涯大概总要算是无聊了罢,但有时竟会连回忆也没有。\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(),才会写入文件中。