Python文件读写的注意事项

2022年7月26日 428点热度 0人点赞 0条评论

关注+星标,每天学习Python新技能

来源于网络,侵删

文件是数据存储的抽象概念,通常用于长期存储数据,它可以是各种类型、各种后缀、各种编码方式。文件的读写是最常用的操作之一,Python内置了open()方法,用于文件的读写操作,其基本语法格式为:

f = open(filename, mode)

open()方法返回了一个文件对象(file)对象,可以将它赋值给一个变量。Python中所有具有read()write()方法的对象,都可以认为是一个file类型的对象。将文件打开后进行相应操作。操作完成需要使用close()方法将文件关闭。

在Python的文件读写中,有以下几点注意事项:

1.文件如果用open()方法打开,必须用close()方法关闭,否则可能出现最后写入的内容没有被保存的情况。

fw = open('测试文件.txt', 'wt')
for i in range(10000):
fw.write('{} '.format(i))

上面的程序从0一直到9999,将数字写入到文件中,每个数字之间用空格分隔,但没有用close()方法对fw文件对象进行关闭,造成的结果如下图所示,只写到8416,后面的丢失了。系统在文件读写时做了缓存处理,写入并不是马上就写到硬盘上,而是先写到内存中的缓存,等缓存区满了才会正式写入到硬盘中,缓存最后的内容会在close()时一并写入到硬盘,close()方法中调用了flush()方法,如果不调用close()那么这部分数据就会丢失了。

图片

2.文件的打开方式有很多种,默认为只读方式,下表列出了其他常用的读写模式。

打开模式

描述

r

只读模式,默认值,如果文件不存在,返回异常FileNotFoundError

w

覆盖写模式,文件不存在则创建,存在则完全覆盖源文件

a

追加写模式,文件不存在则创建,存在则在原文件最后追加内容

x

创建写模式,文件不存在则创建,存在则返回异常FileExistsError

rb

以二进制格式打开一个文件只读,文件指针在文件开头

wb

以二进制格式打开一个文件用于覆盖写入,文件不存在则创建,存在则完全覆盖源文件

ab

以二进制格式打开一个文件用于追加写入,如果文件存在,指针在文件末尾,如果不存在则创建新文件进行写入

r+

打开一个文件用于读写

w+

打开一个文件用于读写,文件不存在则创建,存在则完全覆盖源文件

a+

打开一个文件用于读写,文件不存在则创建,存在则指针在文件末尾

rt

以文本格式打开一个文件只读,文件指针在文件开头

wt

以文本格式打开一个文件用于覆盖写,文件不存在则创建,存在则完全覆盖源文件

不同的模式适用于不同的场景,要注意根据实际情况进行选择。

3.Python提供了三种文件的读取方法,read()、readline()、readlines(),其中,read()将文件中所有内容都读入,readlines()将所有行都读入,这两种方法通常不推荐使用。当文件很大时,比如让你读取一个20G的文件,一般的计算机内存可能会是16G,肯定无法将其全部读取到内存中。所以我们一般通过for循环遍历解决,这样的处理速度更快。逐行处理文件可采用如下格式:

fo = open(fname, 'rt') #fname为文件名称或其绝对路径
for line in fo:
    print(line) #可以为处理一行数据的其他操作,这里以打印为例
fo.close()

4.不同文件的编码方式不同,windows简体中文系统默认为“GBK”,当需要读写使用其他编码方式的文件时,需要修改encoding参数,如下面格式。

fo = open('测试文件.txt', 'rt', encoding='utf-8') 
#有BOM格式的参数为'utf-8-sig'
for line in fo:
    print(line)
fo.close()

当文件被打开并读取完毕后,其指针会在文件末尾,无法再重新读取。此时如果再进行其他操作,需要使用seek(0)将指针移动到文件开头,或者重新打开文件。seek()方法可以与tell()方法配合使用,tell()用于显示文件指针所在位置,是从文件开头算起的字节数。

fo = open('测试文件.txt', 'rt')
for line in fo:
line = line.replace('\n', '')
print(line)
# 再读取一遍
for line in fo:
line = line.replace('\n', '')
print(line)
fo.close()

该程序虽然读取了两遍文件,但第一遍读取完毕后,文件指针已经在文件末尾,再读不会读取到任何内容,因此会出现下图的结果。

图片

5.windows系统中默认的换行符为\r\n,而Python的换行符为\n,在文本模式下,open()函数中默认newline=None,读文件时,会将以\n、\r、\r\n结尾的行转化为\n,写文件时,所有的\n会被转化为系统默认的换行符。如果newline='',读写文件时则不会进行转化。

6.在Python读写文件时,如果只给出文件名称,那么系统只能在与py程序相同的文件夹查找文件。对于其他位置的文件,需要给出文件的绝对路径,否则无法找到文件,例如下面的绝对路径,在使用绝对路径时,由于\是转义字符,因此需要使用\\来代替\。

f = open('D:\\python\\testfile.txt', 'rt')

图片


长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码、破解软件等等

图片

扫描二维码-免费领取

推荐阅读

点击 阅读原文 了解更多

55920Python文件读写的注意事项

这个人很懒,什么都没留下

文章评论