当前位置:首页>python>Python入门:12 文件操作

Python入门:12 文件操作

  • 2026-08-27 05:23:58
Python入门:12 文件操作

之前学的所有内容,都是程序内部运行,没有将数据存储到硬盘上。在实际应用中,最多的是从硬盘上读取数据,或者保存数据。本章就来学习下如何在Python中操作文件。

P 1、文件打开

计算机中的文件通常是按照特定编码格式组织的数据,大多以文件后缀方式来区分格式。如:txt、jpg等。它们在硬盘上按照一定的编码方式进行写入、读取操作。在Python可以用open()函数打开文件,如下:

file = open('hi.txt')print(file)# 输出 <_io.TextIOWrapper name='hi.txt' mode='r' encoding='cp936'>

可以看到,该文件名为hi.txt,模式为读取,编码方式为cp936。open()函数使用方法如下:

其中,

filename:文件名(根据需要带路径)

mode:读取模式。默认为只读

encoding:文件编码方式,默认即可。常用的有gbk、utf-8

buffering:缓冲区,每次读取文件的大小,防止内存溢出。默认为-1,表示一次全部读取

指导手册给出的文件打开模式,如下:

字符

含意

'r'

读取(默认)

'w'

写入,并先截断文件

'x'

排它性创建,如果文件已存在则失败

'a'

打开文件用于写入,如果文件存在则在末尾追加

'b'

二进制模式

't'

文本模式(默认)

'+'

打开用于更新(读取与写入)

P 2、文件读写实例

运行目录下有一个文件hi.txt,内容如下:

你好,我是来自仙界的哪吒。你好,我是花果山水帘洞齐天大圣孙悟空。口嗨中......打架中......

打开文件,并显示内容,如下:

file = open('hi.txt',encoding='utf-8')print(file.read())# 输出: 你好,我是来自仙界的哪吒。你好,我是花果山水帘洞齐天大圣孙悟空。口嗨中......打架中......

可以看到,内容一次性全部输出了,通常我们要处理数据,这不是我们想要的。我们希望按行输出。做如下修改:

file.readline()# 输出:你好,我是来自仙界的哪吒。\n

这里用readline()方法实现按行读取,换行符'\n'也一同读取出来。当然也可以用readlines()方法读取所有数据,并以列表形式呈现。如何知道当前文件指针的位置,可以使用tell()方法。

file.tell()# 输出 41

用seek()方法可以调整文件指针位置。但需要注意,为了后续的读取,应确保指针位置指向字符的开始,否则报错。如下:

file.seek(6)# 输出 6file.readline()# 输出,我是来自仙界的哪吒。\n

假设指针调整到5,则出现报错,如下;

print(file.tell())# 输出:5# 再次读取 file.readline()# 输出: Traceback (mostrecent call last):  File "<pyshell#15>", line 1,in <module>      file.readline()  File "<frozen codecs>", line322, in decodeUnicodeDecodeError:'utf-8' codec can't decode byte 0xbd in position 0: invalid start byte

这主要是因为seek()方法的位置是按照字节算的,而一个中文字符会占用3个字节(不同的系统有差异,也可能是2个或其他),这就导致5位置无法识别数据而报错。

现在,我们用close()方法关闭文件,尝试向文件写入数据。同样是上述的hi.txt文件,但需要用写入模式打开。

file = open('hi.txt',encoding='utf-8',mode='w')

执行上述命令后,发现hi.txt文件为空。这是因为"w"模式是新建写模式,如果目标文件存在新文件将覆盖原文件。现在,我们向文件写入数据,并关闭文件,如下:

file.write('hello world.\n')file.close()

在再此打开文件,发现其内容如下:

hello world.\n

上述文件处理中,每次都要关闭文件,操作很麻烦。在Python可以利用with上下文管理器实现文件自动关闭处理。如下:

with open('hi.txt',encoding='utf-8',mode='a+') as f:    f.write('hello world.\n')

在再此打开文件,发现其内容如下:

hello world.\nhello world.\n
这次只写入1行数据,但文件内容有两行。这是因为本次的文件打开模式是'a+',也就是追加模式。它会打开源文件,并将指针调整到文件最后。而不是新建文件来覆盖原文件。

P 3、小结

open()方法可以打开一个文件,并返回文件对象。文件对象具有如下方法:

1、read()方法用于读取文件所有内容;

2、readline()方法用于按行读取文件内容,且换行符作为独立字符存在,不会自动删除;

3、readlines()方法用于读取所有行,并返回列表;

4、tell()用于说明当前文件指针位置,注意按字节计算的哦;

5、seek()用于调整文件指针的位置。

6、close()用于关闭文件。

7、write()用于写入数据。

with上下文管理器可以自动管理文件关闭操作,省去了手动关闭文件的麻烦。(后续专门做一期上下文管理器的文章,此处不赘述)

☆☆☆ End ☆☆☆转角  ·  遇见  ·  程序猿
-------------------------
那是一抹淡淡的微光

它是数字世界里的一把杀猪刀

却总能巧夺天工

它的世界是纯粹0、1组合

却总能创造无尽幻想

......

本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。

最新文章

随机文章