python 读写文件

python

文件的打开读写关闭(文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源)

python;gutter:true;">#写文件

with open(r'D:\Test\1.txt','w') as f: #with比try....finally更加简洁,with自动调用close()方法;open(文件路径,读取方式),r:只读,默认打开方式

f.write('Hello,world') #write(str):写入字符串;writelines():一次性写入多行

#读文件

with open(r'D:\Test\1.txt','r') as f: #r:读

print f.read() #read([size]),size可选,指定读取的文件大小,单位是字节,默认读取全部,readline():读取一行;readlines([size]),读取返回一个列表,占内存空间

>>> Hello,world

>>> try:

f=open(r'D:\Test',r)

print f.read()

finally:

if f:

f.close()

文件打开方式:

+:同时读写,即可读又可写,边写边读、边读边写

方式说明注意是否清空文件是否覆盖文件内容文件不存在是否创建新文件
‘r’只读文件不存在时报错--
'r+'读写可读可写,文件不存在报错,写入时只覆盖写入文件的大小
'w'只写可写方式打开,不可读-
'w+'读写可读可写-
'a'追加

文件已有的内容后追加内容,不可读

'a+'追加以及读可读可追加,写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码,因为指针指向末尾,读取时实际上是跳过实际要读取的内容,去读取磁盘缓存的上一个文件缓存的内容,所以是乱码
'rb','wb','ab','rb','wb+','ab+':二进制方式打开

>>> with open(r'D:\Test\a.txt','w') as f:

f.write('Hello,world')

>>>with open(r'D:\Test\a.txt','r') as f:

print f.read()

>>> Hello,world #w写入

>>> with open(r'D:\Test\a.txt','a') as f: #追加,在后面添加内容

f.write('Hello,world')

>>> with open(r'D:\Test\a.txt','r') as f:

print f.read()

>>> Hello,worldHello,world

>>> with open(r'D:\Test\a.txt','w') as f: #清空前面的内容重新写入

f.write('Hello,world')

>>> Hello,world

有关文件可能读取出乱码的问题:

一:检查下文件的指针的指向,在写完之后,必须要seek(0),把文件指针重新指向文件开头,然后再读,否则就会从缓冲区读取一大堆乱码

二:文件写入的操作先是在缓存中进行的,只有文件关闭才真正写入,因为read()似乎还是优先读取内存缓冲区。

以上的两个问题涉及到文件指针的移动seek()以及刷新缓存flush()

>>> f=open(r'D:\Test\a.txt','w')

>>> f.write('kkkkkkkk') #此时文件的指针=8,8个字节

>>> f.flush() #刷新缓存,缓存中的内容刷新变成:kkkkkkkk[EOF],内容为空时:[EOF]

>>> f.read() #此时的指针在文件尾[EOF]上,则输出的是''

''

>>> f.seek(0) #将指针指向文件头,再进行文件内容的读取,就不会产生乱码

>>> f.read()

'kkkkkkkk'

>>> f.close()

 产生乱码例子:

>>> f=open(r'D:\Test\a.txt','w+')

>>> f.write('uuuuuuuuuuuuuuuu')

>>> f.read() #没有刷新缓存且将指针指向文件头,读取的是缓存中的其他乱码内容

'\x00\x06\x00\x00\x00@\x00\x00\x00sb\x00\x00\x00d\x00\x00Z\x00\x00d\x01\x00d\..............................'

以上是 python 读写文件 的全部内容, 来源链接: utcz.com/z/389203.html

回到顶部