目录
(2.)open函数的复合写法open函数的复合写法)
[(2.) writelines()方法](#(2.) writelines()方法)
简介
在 Python 编程的世界里,数据的存储与读取是至关重要的环节,而文件操作正是实现这一环节的核心技能。无论是处理文本数据、保存程序运行结果,还是读取配置信息,都离不开对文件的灵活操作。通过本节课的学习,你将掌握 Python 文件操作的核心技巧,能够轻松地与各种文件进行交互,为后续处理更复杂的数据打下坚实的基础。
1.文件
一个文件由3部分组成,分别是文件的保存路径、文件类型、文件的内容。而计算机本质上只能处理0和1组成的二进制数字,使用编码技术(密码本)将内容翻译成0和1存入。计算机中有许多可用编码: UTF-8、 GBK、 Big5 等 不同的编码,将内容翻译成二进制也是不同的。UTF-8是目前全球通用的编码格式 除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。一般文件里面有中文就使用UTF-8,如果是全英文就使用GBK进行编码。
2.操作文件
文件的操作同城包含3个步骤,即打开文件、操作文件、关闭文件。
1.打开文件
Python中通常使用open()函数来打开一个文件,其使用形式如下:
java
open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,
closefd=Ture,opener=None)
功能:打开一个文件。这里的打开文件与在操作系统中打开文件的概念不同,这里的打开文件是与文件建立通道并获取操作文件的权限。
参数'file':需要打开的文件路径(包含路径和完整文件夹名),其数据类型为字符串类型。
参数'mode':指明文件打开的模式
参数'encoding':编码格式,推荐使用UTF-8,encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
这里主要介绍这三个参数,其他参数一般直接默认就行,open函数给定上面三个参数就足够了
(1.)打开模式
打开模式也就是mode的参数,具有三种基本访问方式r、w、a三种
|--------|-------------------------------------------------------------|
| 模式 | 描述 |
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。 |
| a | 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| b | 二进制模式,可放在r/w等模式后面,如(wb:二进制覆盖写模式) |
r只读模式
java
f = open('E:\书代码\第7章\n.txt','r')
print(f)
w覆盖写模式
java
for i in range(1,11):
path = r'D:\Pthon Project\代码\代码\第7章'+str(i)+'.txt'
f = open(path,'w')
f.close()
循环十次就会创建十个txt文件如图所示

a追加模式
java
f = open(r'D:\Pthon Project\代码\代码\\第7章\a.txt', 'a', encoding = 'utf-8')
f.write('提高办公效率')
f.close()
对a文件追加写,运行前a文件内容如下图1所示,执行代码可以看出写入了"提高办公效率",结果发现写在了a文件的后面


对于这三种基础模式,还有两个可能会遇到的模式,一个是"x"创建写模式,一个是"+"增加模式
"x"创建写模式会创建一个新文件并给定新文件写入权限。
+"增加模式此模式需要与'r'w'x'a'模式中的一种结合使用,表示在原有模式基础上增加读写权限
(2.) open函数的复合写法
open()函数还有一种复合写法,可以避免用户因忘记使用clo se)方法关闭文件而导致的程序异常等问题。open()函数的复合写法其使用形式如下:
java
with open(参数) as 变量名:
with:是Python中的保留字,是一种上下文管理器 ,可以自动管理文件,无须再使用close()方法来进行文件的关闭操作。
as:是Python中的保留字,与with结合使用。
open()函数的使用形式与之前介绍的一致。变量名即文件打开后的赋值变量名,与以上示例代码中变量f的含义相同,需要注意的是,在复合写法的最后有一个":"且对文件进行操作的代码都需要缩进(缩进要求与)含义相同。
2.读取文件
读取文件内容前需要确定文件的打开模式是否为只读模式(r),如果是则可以使用文件对象中的read()、readline()、readlines()方法读取文件内的信息。
(1.)read()方法:
java
文件对象.read(size=-1)
参数size:表示要从文件中读取的数据的长度(单位是字节),如果没有传入size,那么就表示读取文件中所有的数据。
代码1
java
f = open('D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','r',encoding='utf-8')
print(f.read())
f.close()
read中没有参数,对文件读取全部数据,运行结果如下:
java
由于计算机不能识别人类语言,因此用户(人)与计算机交互的过程往往是通过程序的操作来实现的。
程序是计算机理解用户操作意图的途径,而程序是由编程语言来编写实现的,即使用编程语言规范地编写代码以实现特定的功能,让计算机按照代码来执行相应的操作。因此编程语言是人与计算机相互沟通的基础。
代码2
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','r',encoding='utf-8')
a = f.read(10) #从文件中读取size个字符的内容
print(a,type(a))
f.close()
read里面传入一个10,就是读取文件的前10个字符,然后输出读取的10个字符是什么类型的数据,结果如下:
java
由于计算机不能识别人 <class 'str'>
(2.)readline()方法:
readline()使用形式:
java
readline(size=-1)
参数size:默认从文件一次读取一行内容,如果size为其他值,则读取该行前size个字符。
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt', 'r', encoding='utf-8')
print(f.readline())
f.close()
#运行结果:由于计算机不能识别人类语言,因此用户(人)与计算机交互的过程往往是通过程序的操作来实现的。
(3.)readlines()方法:
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。使用形式:
java
readlines(hint=-1)
参数hint:获取所在行内容的hint个字符,如果第一行有5个字符,hint=5,就只读去第一行内容。第2行如果有5个字符, hint=6,会读取第1行和第2行内容(5<hint≤11时会读取前两行内容)。
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','r',encoding='utf-8')
print(f.readlines()) #从文件中读取所有内容,以列表返回,每行为列表中的一个元素
f.close()
# 运行结果为:['由于计算机不能识别人类语言,因此用户(人)与计算机交互的过程往往是通过程序的操作来实现的。\n',
# '程序是计算机理解用户操作意图的途径,而程序是由编程语言来编写实现的,即使用编程语言规范地编写代码以实现特定的功能,让计算机按照代码来执行相应的操作。因此编程语言是人与计算机相互沟通的基础。\n']
(4.)for循环遍历
读取文件内容还可以通过for循环遍历发方式来实现
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','r',encoding='utf-8')
for line in f: #遍历文件
print(line)
f.close()
运行结果为:
java
由于计算机不能识别人类语言,因此用户(人)与计算机交互的过程往往是通过程序的操作来实现的。
程序是计算机理解用户操作意图的途径,而程序是由编程语言来编写实现的,即使用编程语言规范地编写代码以实现特定的功能,让计算机按照代码来执行相应的操作。因此编程语言是人与计算机相互沟通的基础
3.写入文件
写入文件的方法有write(参数)和writelines(参数)
(1.) write()方法
write()方法的使用形式:
java
write(text)
把字符串text写入文件,返回值是写入的字符串数(字符串的长度)
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','w',encoding='utf-8')
print(f.write('我正在学习Python'))
f.close()
#运行结果为:11
文件内容:

(2.)writelines()方法
writelines()方法的使用形式为:
java
writelines(lines)
把字符串列表(列表中元素均为字符串)写入文件,且不添加换行符。参数lines 表示字符串列表,返回值为None表示空
java
f = open(r'D:\Pthon Project\代码\代码\第7章\编程语言概述.txt','w',encoding='utf-8')
ls = ['zhangsan','lisi','wangwu']
print(f.writelines(ls))
f.close()
#运行结果为None
3.文件的读取位置和路径
1.调整文件的读取位置
当读取到文件末尾,需要跳转到文件开头重新读取时,或当写入到文件末尾,需要重新在文件开头写入内容时可以使用seek()方法。
java
seek(cookie,whence=0)
功能:把文件指针移到新的位置上
参数cookie:表示相对于whence位置的偏移量,如果为正数表示向右偏移,如果是负数表示向左偏移一个汉字的偏移量是3。
参数whence:表示文件指针设定的位置,默认值为0,表示从文件开头处开始计算,值为1表示从当前位置开始计算,值为2表示从文件结尾处开始计算。
2.绝对路径与相对路径
绝对路径表示从磁盘的根目录开始到目标文件的路径,相对路径表示相当于目前文件的位置到目标文件的位置。
4.csv文件
csV文件是一种逗号分隔式字符文件,可以被大部分的软件直接识别,例如记事本或Excel均可直接打开,CSV文件的特点是每个数据之间使用逗号分隔开。用Excel打开csv文件时,每一个数据占据一个单元格,每一个数据所占到单元格位置由逗号决定。
记事本打开

Excel打开:
