文件操作

前言:

在项目中,难免会遇到操作文件的场景,如读取文件中的部分或全部内容,或者讲数据写入文件达到持久化的目的。

 

一、打开文件:

 在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 关键字可以帮我们自动关闭文件流。

posted @ 2022-03-14 17:46  Target_L  阅读(59)  评论(0)    收藏  举报