在办公室里,我们就像勤劳的牛马,每天要处理各种各样的文件,比如记录工作内容的文档、整理数据的表格等。Python 就像是我们的超级助手,能帮助我们高效地对这些文件进行编码和操作。
一、文件与编码
1.1 文件
什么是文件?
在办公室的日常工作中,文件就像是我们的工作伙伴。想象一下,每天我们要处理的工作安排表、会议记录、客户信息等,这些都以文件的形式存在。
在计算机中,文件是存储在计算机中的数据集合,它可以包含文本、图像、音频等各种类型的信息。一段文章、一个视频、一首音乐、一个可执行的程序,都被做成文件,它存在于硬盘中,存在我们的手机里。
如:python的安装目录下就是一个个的文件。
1.2 文件编码
在计算里,只认识0和1这两个数字,我们看到的是可识别的文本,那要怎么告诉计算机呢,这就需要到编码了,就是翻译,将人能看懂的翻译一下,变成机器可以看懂的。
常见的文本文件编码有 UTF - 8、GBK 等。在电脑里,后缀名为.txt
- UTF - 8:这是一种通用的编码方式,支持世界上几乎所有的字符,就像一种全球通用的语言,能让不同国家的人都能交流。Python 默认使用的就是 UTF - 8 编码。
- GBK:主要用于中文编码,在国内的一些老系统或者特定文件中比较常见,就像是中文的一种方言,专门服务于中文用户。
我们先打开文件有个直观感受
在文本文件的右下角有个UTF-8的显示就是文件的编码
二、文件操作
2.1 打开文件
在 Python 中,要对文件进行操作,首先得打开它。这就好比我们要查看办公室的文件,得先把文件从文件柜里拿出来。使用open()
函数来打开文件,它需要两个重要的参数:文件路径和打开模式。
我们在打开文件之前,先创建一个文本文件
再创建好的txt文件里 输入几句话:
打开文件的语法:open(name,mode,encoding)
name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:打开文件的模式(访问模式):只读、写入、追加等。
r 以只读方式打开文件,这是默认模式,只能读取,不能写入。 w 打开一个文件只用于写入。如果该文件已存在则打开文件,从头开始编辑,原有内容会被删;除如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。
如果该文件不存在,创建新文件进行写入。encoding:编码格式(推荐使用UTF-8),如果没有指定该参数,Python会调用
locale.getpreferredencoding()
获取系统默认编码。
file_path = 'work_schedule.txt'
# 'r' 表示以只读模式打开文件
file = open(file_path, 'r', encoding='utf-8')
print(file)
这里我们以只读模式'r'
打开了一个工作安排文件work_schedule.txt
,并指定了编码为 UTF - 8。
2.2 关闭文件
关闭文件的语法:close()
file_path = 'work_schedule.txt'
# 'r' 表示以只读模式打开文件
file = open(file_path, 'r', encoding='utf-8')
print(file)
file.close()
不过,为了确保文件在使用完后能正确关闭,我们通常使用with
语句,它会自动帮我们处理文件的关闭操作,后面就不需要再写close了。
file_path = 'work_schedule.txt'
with open(file_path, 'r', encoding='utf-8') as file:# 在这里对文件进行操作pass
2.3 读取文件
打开文件后,我们就可以读取里面的内容了。这就像我们从文件中获取工作信息一样。
- 读取整个文件内容
使用read()
方法可以读取文件的全部内容。file_path = 'work_schedule.txt' with open(file_path, 'r', encoding='utf-8') as file:content = file.read()print(content) # 我是机器人 # 我很聪明
- 逐行读取文件内容
使用readline()可以读取一行文本:
如果文件很大,逐行读取会更高效。使用file_path = 'work_schedule.txt' with open(file_path, 'r', encoding='utf-8') as file:print(file.readline())print(file.readline()) # 我是机器人 # # 我很聪明
for
循环可以逐行读取文件。file_path = 'work_schedule.txt' with open(file_path, 'r', encoding='utf-8') as file:for line in file:print(line.strip()) # 我是机器人 # 我很聪明
strip()
方法用于去除每行末尾的换行符,这里我们逐行读取了work_schedule.txt
的内容。
2.4 写入文件
有时候,我们需要往文件里写入新的内容,就像我们在文件中记录新的工作信息。使用'w'
模式打开文件可以进行写入操作,如果文件不存在会创建新文件,如果文件已存在会覆盖原有内容。
写入文件的语法:write(内容)
file_path = 'work_daily_report.txt'
with open(file_path, 'w', encoding='utf-8') as file:report_content = "今天完成了项目的需求分析,与客户沟通了进度。"file.write(report_content)
执行后,我们会看到有这么一个文件
双击打开,就会看到已经写入如下内容
2.5 追加内容到文件
如果我们不想覆盖原有文件内容,而是在后面追加内容,可以使用'a'
模式。
file_path = 'work_daily_report.txt'
with open(file_path, 'a', encoding='utf-8') as file:additional_content = "\n还参加了团队的周会,讨论了下一步的工作计划。"file.write(additional_content)
多了一行字符串,原来的内容还存在:
三、查看文件编码
3.1 安装包chardet
有时候,我们拿到一个文件,不知道它是什么编码。可以借助 Python 的chardet
库来查看。不过,当我们导入这个包时,如下,报红色,代码无法通过:
我们得先安装这个包,在pycharm的左下方工作区域里,如下图打开控制台
在控制里输入
pip install chardet
。
回车,开始安装
安装成功
这时候我们在看导入包,红色消失了
3.2 查看编码
我们现在就可以查看文件编码了,
语法:chardet.detect(文本内容)
import chardetfile_path = 'work_daily_report.txt'
with open(file_path, 'rb') as file:raw_data = file.read()result = chardet.detect(raw_data)print(f"文件的编码是: {result['encoding']}")
# 文件的编码是: utf-8