一、python文件读写
文件的读写是我们经常用到的操作,常用的编程语言都会提供一个内置函数,通过输入'文件路径'和'文件打开模式'来打开一个文件对象。
以下是常见的python中的文件中读写操作
(一)、常见的几种打开模式
打开模式 | 用法 |
---|---|
r | 以只读的方式打开文件,若文件不存在,会报错 |
r+ | 可以同时读写,若文件不存在,会报错,写入时是覆盖写入 |
w | 以只写的方式打开文件,若文件不存在则新建,写入时是清空写入 |
w+ | 可以同时读写,若文件不存在则新建,写入时是清空写入 |
a | 以只追加可写模式打开文件,若文件不存在则新建 ,写入时是追加写入 |
a+ | 可以同时读写,若文件不存在则新建,写入时是追加写入 |
(二)、打开模式练习
1.再D盘创建test1.txt文件
2.’r‘只读 ——read
代码:
filepath = r'D:\test1.txt'#找到文件的路径,字符串的外面加一个r,表示后面的字符串的所有转义符均不生效
file1 = open(filepath,'r',encoding='utf-8')
print(file1.read())#read()函数--读取全部内容,后有详解
#通过只读'r'的方式打开文件
#因为文件里是中文,所以我们指定编码方式为‘utf-8’
#'r'是open函数中‘打开方式’的缺省值,可以省略
file1.close()#关闭文件 使用open()时,必须要有close(),否则会一直占用内存
运行截图:
如果,用只读'r'打开一个不存在的文件'test2.txt',则会报错,运行截图如下:
3. r+ 读写--覆盖写入—read+
代码:
# r+ 读写--覆盖写入
filepath = r'D:\test1.txt'
file1 = open(filepath,'r+',encoding='utf-8')#通过'r+'的方式打开文件
file1.write('呱唧呱唧')#以覆盖写入的方式写入'欢迎交流'
file1.seek(0)#seek(n):光标回到文件首位,之后偏移n位
print(file1.read())
file1.close()
运行截图:
以上代码中运用到了seek(n)函数,这是因为我们写入内容后,光标位置在刚写入内容的后边,而读取文件内容时,是从光标的位置开始往后读,这时候就需要移动下光标位置以能获取文件全部内容。
我们看下上边例子中,不使用seek移动光标,输出的内容:
备注:用'r+'打开一个不存在的文件'test2.txt',同样会报错
4.w 只写—write
只写‘w’方式,只能写入,不能读取,否则会报错。写入情况分以下两种:
(1)在已存在的文件中进行写入,会清空文件中之前的内容
代码:
# w 只写—write
filepath = r'D:\test1.txt'
file1 = open(filepath,'w',encoding='utf-8')#通过只写'w'的方式打开文件
file1.write('欢迎交流')
file1.close()
运行截图:
(2)只写‘w’方式打开不存在的文件,会新建文件并写入内容
代码:
filepath = r'D:\test2.txt'
file1 = open(filepath,'w',encoding='utf-8')#通过只写'w'的方式打开文件
file1.write('啊啊啊啊啊啊啊啊啊啊')
file1.close()
运行截图:
5.w+ 读写--清空写入—write+
'w+'比'w'模式多了同时读写的功能,其他完全一样。
代码:
# W+,
filepath = r'D:\test_new.txt'#不存在的文件
file1 = open(filepath,'w+',encoding='utf-8')#通过'w+'的方式打开文件
file1.write('这是个新文件')
file1.seek(0)#光标回到首位
print(file1.read())
file1.close()
运行截图:
6.a 只写--追加写入
我们经常会有这样的需求,在写入内容时不想删除之前的内容。
打开模式'a'就可以满足。
与打开模式'w'唯一的区别就是写入方式为'追加写入'
也可以理解为比'w'方式多了一个'把光标移到末尾'的操作
代码:
filepath = r'D:\test_new.txt'
file1 = open(filepath,'a',encoding='utf-8')#通过追加写'a'的方式打开文件
file1.write('欢迎交流')#追加写入内容
file1.close()
运行截图:
7.a+ 读写--追加写入
'a+'比'a'模式多了同时读写的功能,其他完全一样。
代码:
filepath = r'D:\test_new.txt'
file1 = open(filepath,'a+',encoding='utf-8')#通过'a+'的方式打开文件
file1.write('\naaaaaaaaaaaaaaaaaaaaaaaaaaa')#追加写入内容
file1.seek(0)#把光标移到首位
print(file1.read())
file1.close()
运行截图:
(三)、with open
为了避免忘记或者为了避免每次都要手动关闭文件,我们可以使用with语句
用法与open()一样
优点:
(1)它可以处理多个文件
(2)不需要写close()方法
代码:
filepath1 = r'D:\newfile1.txt'
filepath2 = r'D:\newfile2.txt'
with open(filepath1,'w+') as file1,open(filepath2,'w+') as file2:
#同时打开两个新建文件
file1.write('测试龙巫师')#文件1写入内容
file2.write('aaaaaaaa')#文件2写入内容
file1.seek(0)#文件1光标移到首位
file2.seek(0)#文件2光标移到首位
print(file1.read())
print(file2.read())
运行截图:
(四)、文件读取相关方法
方法 | 作用 |
---|---|
read() | 读取文件全部内容,返回值是字符串 |
readline() | 读取一行的内容,返回值是字符串 |
readlines() | 逐行读取文件所有内容,返回值是列表 |
read().splitlines() | 读取文件全部内容,返回值是列表,不出现换行符 |
以下是几种方法常见用法:
(1)先建一个new_test.txt,内容如下
(2)read()
代码:
filepath = r'D:\new_test.txt'
with open(filepath,encoding='utf-8') as file:
print(file.read())#使用read()读取全部内容
运行截图:
(3)readline()
代码:
with open(filepath, encoding='utf-8') as file:
print(file.readline())
运行截图:
(4)readlines()
代码:
with open(filepath, encoding='utf-8') as file:
print(file.readlines())
运行截图:
(5)read().splitlines()
代码:
with open(filepath,encoding='utf-8') as file:
print(file.read().splitlines())
运行截图: