文件操作
前言:
在项目中,难免会遇到操作文件的场景,如读取文件中的部分或全部内容,或者讲数据写入文件达到持久化的目的。
一、打开文件:
在python中,打开文件用open()方法。
参数:
file:文件路径
mode:打开模式,默认GBK。
encoding:编码方式
还有errors,newline,closefd 等,较少用到。
文件路径可以是相对路径,也可以是绝对路径,默认的规则是从模块所在目录及子目录开始寻找目标文件,若文件
不默认搜索路径中,则需填写绝对路径或完整的相对路径表达式。
打开模式总体分为3种:r,w,a
r:读,w:写:a:追加写
如果是二进制文件,则需在其后面添加b,即rb,wb, ab
其实每种模式都有一种+方式,即r+,w+,a+,意思是读写。
二、读\写文件:
1、读文件:
file = open("234.txt", "r", encoding="utf-8") cont = file.readlines()
file.close() print(cont)
上面示例种,标识从234.txt文件中读取内容,编码方式为utf-8
读文件的方法有read(),readlines()两种。
read():
234.txt
hello python
hell0 java
please practice more and more
file = open("234.txt", "r", encoding="utf-8") cont = f.read() file.close() print(cont)
执行结果:

我们可以看到,read()方法读取了文件中的所有内容。
readlines():
还是文件234.txt,但我们用readlines()来读取:
file = open("234.txt", "r", encoding="utf-8") cont = file.readlines() print(type(cont)) print(cont) file.close()
执行结果:

我们可以看到,用readlines()读取出来的结果是一个列表,列表中包含每一行的数据(换行符也在其中)
readline():
file = open("234.txt", "r", encoding="utf-8") cont = file.readline() print(cont) file.close()
执行结果:

我们可以看到,readline()用于读取一行数据。
扩展,如果读取一部分的数据呢,比如我们要读取234.txt中的python,该怎么办?这时候我们要结合seek()方法。
file = open("234.txt", "r", encoding="utf-8") file.seek(6) cont = file.readline() print(cont) file.close() file1 = open("234.txt", "r", encoding="utf-8") file1.seek(6) cont = file1.readline(6) print(cont) file1.close()
执行结果:

我们可以看到,使用seek()方法,出入参数offset(起始值,比如上面例子中的6),然后再结合readline()或者read()使用。
注意:read()可以传入参数limit,即读取的最大范围。
2、写文件:
与读文件不同,读取文件时,若路径上不存在次文件时,则会报错,但写文件时路径上不存在此文件,则会在此路径上新建
同名文件。
write():传入写入对象(字符串)
file = open("789.txt", "w", encoding="utf-8") file.write("this is python") file.close()
执行结果:

被成功写入。
writelines():传入一个可迭代对象。
datas = ["this is python", "this is java", "this is C++"] file = open("789.txt", "w", encoding="utf-8") file.writelines(datas) file.close()
执行结果:

可以看到,虽然datas的内容不成功写入了,但是好像也并不是最理想的结果。
我们可以对datas的元素末尾都添加一个换行符。
datas = ["this is python", "this is java", "this is C++"] file = open("789.txt", "w", encoding="utf-8") file.writelines([data+"\n" for data in datas]) file.close()
执行结果:

或者先对datas使用换行符进行拼接。
datas = ["this is python", "this is java", "this is C++"] d = "\n".join(datas) file = open("789.txt", "w", encoding="utf-8") file.writelines(d) file.close()

我们可以看到,二者还是有区别的,第二种方式可以避免最后多添加一行。
三、关闭文件
在使用文件时,一定要注意打开文件后需要关闭它,使用close()方法即可
四、with关键字,自动关闭文件流
with 关键字可以帮我们自动关闭文件流。
浙公网安备 33010602011771号