引言
本章我们来学习Python的文件操作。在前面的章节中,我们学会了如何处理内存中的数据。但现实中的数据往往需要保存到文件中,或者从文件中读取。今天,我们将学习如何在Python中操作各种文件,这是数据处理和AI项目中必须掌握的技能。
一、文件的介绍
1、什么是文件
文件作为持久化存储数据的基本单位,其作用包括保存程序运行结果、读取配置信息、存储各类数据以及记录运行日志。一个完整的文件由三个关键要素构成:保存路径——文件在存储设备中的具体位置,文件类型——定义了数据的格式和结构,文件内容——实际存储的信息数据。有了这三者,数据才能够被系统准确识别、长期保存并随时访问。
2、文件的编码方式
因为计算机底层只能识别二进制数据(0和1),而我们日常需要使用各种文字、符号进行交流,因此需要编码作为字符与二进制之间的转换桥梁。常见的编码方式包括:UTF-8是一种通用性最强的编码,支持全球所有语言的字符,GBK是专门为简体中文设计的编码标准,主要在中国大陆使用;ASCII是早期的编码,仅支持基本的英文字符、数字和符号,无法处理其他语言字符。
二、操作文件
1、打开文件
在Python中我们想要打开文件通常需要使用open()函数,需要了解的是这里的打开文件不是传统意义上的意思,而是与文件建立通道并获取操作文件的权限。其使用形式如下:
open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
1)、file(必需参数):要打开的文件路径
2)、mode(可选,默认='r'):文件打开模式
常见模式有:
'r':只读模式,只获得文件的读取权限,不能修改文件。
'w':覆盖写模式,如果文件夹中没有指定路径的文件就会创建出一个文件。如果文件夹中此文件已存在,则会删除该文件内容,重新写入新内容。
'x':创建写模式,会创建一个文件并给新文件写入权限,注意不能有与将要创建文件同名的文件。
'a':追加写模式,在保留原文件的基础上在文件末尾追加写入新内容,如果文件不存在则会重新创建出一个文件并给予写入去权限。
'b':二进制模式(如图片、视频)
't':文本模式(默认)
'+':增加模式,该模式要与'r','w','x','a'中的一种结合使用表示在原有模式基础上增加读写内容。
3)、buffering:设置缓冲策略
4)、encoding(可选,默认=None):文件编码格式
5)、errors(可选,默认=None):编码错误处理方式
6)、newline(可选,默认=None):换行符处理方式
7)、closefd(可选,默认=True):是否在文件关闭时同时关闭文件描述符
8)、opener(可选,默认=None):自定义开启器,用于返回文件描述符
a = open(r'D:\\python\\PythonProject1\\first.txt', 'r', encoding='utf-8')
print(a)
# 操作文件
a.close() # 必须关闭文件
# 读取文件内容
a = open('first.txt', 'r', encoding='utf-8')
content = a.read()
print("文件内容:", content)
a.close()
# 创建新文件或覆盖已有文件
b = open('second.txt', 'w', encoding='utf-8')
b.write("这是新写入的内容\n")
b.write("原有内容会被覆盖")
b.close()
# 创建新文件,如果文件已存在会报错
try:
c = open('third.txt', 'x', encoding='utf-8')
c.write("这是新创建的文件")
c.close()
print("文件创建成功")
except FileExistsError:
print("文件已存在,无法创建")
# 在文件末尾追加内容
d = open('fourth.txt', 'a', encoding='utf-8')
d.write("这是追加的内容\n")
d.close()
# 'w+' - 写读模式(会覆盖原内容)
f = open('sixth.txt', 'w+', encoding='utf-8')
f.write("新内容")
f.seek(0) # 将文件指针移到开头
content = f.read()
print("写入后读取:", content)
f.close()


2、 读取文件
当我们处于只读模式时,要想读取文件内容有四种方式:
1)、read():读取整个文件
文件.read(size=-1)
size :从文件中读取size个字符,默认读取全部。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.read())
a.close()

2)、readline():读取一行
文件.readline(size=-1)
size :默认读取一行内容,如果size为其他数值代表读取该行前size个字符。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.readline())
a.close()
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.readline(2))
a.close()


3)、readlines():读取所有行并且以列表形式返回,每行内容为列表中的一个元素。
文件.readlines(hint=-1)
hint:获取所在行内容的hint个字符,例如如果第一行有6个字符,hint=6就只读第一行内容。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.readlines())
a.close()
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.readlines(6))
a.close()


4)、for循环遍历
读取文件内容还可以通过for循环遍历来实现。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
for line in a:
print(line)
a.close()

3、写入文件
写入文件的方法有两种:
1)、write():把字符串text写入文件。
文件.write(text)
text:为写入信息,数据类型为字符串。
a = open(r'd:\python\PythonProject1\first.txt', 'w', encoding='utf-8')
print(a.write('我在学习人工智能'))
a.close()

2)、writelines():把字符串列表写入文件,不添加换行符。
文件.writelines(lines)
lines:字符串列表
a = open(r'd:\python\PythonProject1\first.txt', 'w', encoding='utf-8')
ls = ['人工','智能']
print(a.writelines(ls))
a.close()

三、文件的读取位置与路径
当对文件进行操作时,执行顺序是从上往下的,而且内存也会记录我们的读写位置,再次开始会从记录的位置在向下执行。
1、调整文件的读取位置
文件指针像一个"光标"标记着当前读写操作的位置。当文件被打开时,指针默认位于文件开头(位置0);随着读取操作的进行,指针会自动向后移动;我们可以通过seek()方法可以手动调整指针位置,实现随机访问文件的不同部分。
seek(cookie,whence=0)
cookie:相对于whence位置的偏移量,正数表示向右偏移,负数向左偏移,注意一个汉字的偏移为3。
whence:表示指针设定的位置,默认0表示从头开始,值为1时表示从当前位置开始,值为2时表示从结尾处开始。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.readline(),end='')
print(a.readline(),end='')
a.seek(9,0)
print(a.readline(),end='')
a.close()

2、绝对路径和相对路径
用open()函数读取文件时,文件路径的表示方法有两种。
1)、绝对路径
绝对路径表示从磁盘根路径到目标文件的路径。
a = open(r'd:\python\PythonProject1\first.txt', 'r', encoding='utf-8')
print(a.read())
a.close()

2)、相对路径
相对于当前程序文件的位置
'first.txt' - 当前文件夹下的first.txt
'../third.txt' - 上一级文件夹的first.txt
'data/second.txt' - 当前文件夹下data文件夹中的second.txt
a = open('first.txt', 'r', encoding='utf-8')
print(a.read())
a.close()
b= open(r'data/second.txt', 'r', encoding='utf-8')
print(b.read())
b.close()
c= open(r'../third.txt', 'r')
print(c.read())
c.close()

四、CSV文件
CSV(逗号分隔值)是一种简单通用的纯文本格式,用于存储表格数据。它的每行代表一条数据记录,各个字段之间用逗号分隔,这种结构是数据交换、分析和人工智能项目中最常用的数据格式之一,能够被大多数数据处理工具和编程语言轻松读取和生成。
CSV文件示例:
a = open('cc.csv','r')
print(a.read())
a.close()
姓名,年龄,成绩
小王,18,95
小红,19,88
小明,20,92
到这里我们就已经基本掌握了Python文件操作的基本技能。在下一篇里,我们将继续学习Python中另一个非常重要的概念'库'。
Python文件操作入门指南
730

被折叠的 条评论
为什么被折叠?



