知行编程网知行编程网  2022-09-03 07:00 知行编程网 隐藏边栏  79 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python写文件有时候写不进去怎么办的相关知识,包括python中的文件读写,以及python如何将内容写进文件这些编程知识,希望对大家有参考作用。

python有时候写不出来文件怎么办?

python文件读写,以后就用with open语句

读写文件是最常见的IO操作。 Python内置了读写文件的函数,其用法与C兼容。

在读写文件之前,我们首先要了解,在磁盘上读写文件的功能是由操作系统提供的。现代操作系统不允许普通程序直接操作磁盘。因此,读写文件就是请求操作系统打开一个文件。一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口,从文件对象中读取数据(读文件),或者将数据写入文件对象(写文件)。

读文件

要以文件读取模式打开文件对象,请使用 Python 内置的 open() 函数,传入文件名和标识符:

>>> f = open('/Users/michael/test.txt','r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。

如果文件不存在,open() 函数将抛出一个带有错误代码和详细信息的 IOError,告诉你文件不存在:

>>> f=open('/Users/michael/notfound.txt','r')
Traceback (most recent call last):
  File "", line 1,inFileNotFoundError: [Errno 2] No such fileordirectory:'/Users/michael/notfound.txt'

如果文件打开成功,接下来调用read()方法一次性读取文件的全部内容,Python将内容读入内存,用str对象表示:

>>> f.read()'Hello, world!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:

try:
    f = open('/path/to/file','r')
    print(f.read())finally:
    if f:
        f.close()

但是每次都这样写太麻烦了,所以Python引入了with语句来自动为我们调用close()方法:

with open('/path/to/file','r') as f:
    print(f.read())

这个和前面的try...finally是一样的,但是代码更简洁,不用调用f.close()方法。

调用 read() 将一次读取文件的全部内容。如果文件有10G,内存就会爆炸。因此,为了安全起见,你可以重复调用 read(size) 方法,每次最多读取 size 个字节。 .或者,调用 readline() 一次读取一行,调用 readlines() 一次读取所有内容并逐行返回列表。因此,需要根据需要来决定如何调用。

如果文件很小,read() 一次读取最方便;如果无法确定文件大小,重复调用 read(size) 会更安全;如果是配置文件,调用readlines()最方便:

forlinein f.readlines():
    print(line.strip())# 把末尾的'\n'删掉

写文件

写文件和读文件一样,唯一的区别是调用open()函数时,传入标识符'w'或'wb'表示写文本文件或写二进制文件:

>>> f = open('/Users/michael/test.txt','w')>>> f.write('Hello, world!')>>> f.close()

你可以重复调用 write() 来写入文件,但一定要调用 f.close() 来关闭文件。我们在写文件的时候,操作系统往往不会立即将数据写入磁盘,而是将其存储在内存缓存中,空闲的时候再慢慢写入。只有调用 close() 方法时,操作系统才会保证所有未写入的数据都会写入磁盘。忘记调用 close() 的后果是只有部分数据可能写入磁盘,其余的则丢失。因此,为了安全起见,仍然使用 with 语句:

with open('/Users/michael/test.txt','w') as f:
    f.write('Hello, world!')

要编写具有特定编码的文本文件,请将编码参数传递给 open() 函数以自动将字符串转换为指定的编码

字符编码

读取非UTF-8编码的文本文件,需要将encoding参数传递给open()函数,例如读取GBK编码的文件:

>>> f = open('/Users/michael/gbk.txt','r', encoding='gbk')>>> f.read()'测试'

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

>>> f = open('/Users/michael/gbk.txt','r', encoding='gbk', errors='ignore')

二进制文件

上面提到的默认是读取文本文件,它们是 UTF-8 编码的文本文件。要读取二进制文件,例如图像、视频等,请以 'rb' 模式打开文件:

>>> f = open('/Users/michael/test.jpg','rb')>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...'# 十六进制表示的字节

总结:以后用with open语句读写文件,不要像以前那样用f = open()。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享