文章目录
有几条逻辑先写在前面:
- 必须首先使用open函数,打开文件之后才有后续的write和read操作
- 需要在open函数中就定义好文件的使用用途(设置open函数的参数),比如读、写、还是读写、还是追加等等
- 指针的位置直接影响目标内容
本文章,主要从基本的打开、写、读和文件操作两个大的方向来进行小结。
1. 文件打开、写入、读取的简要概述
open函数
open()
函数是Python内置的函数,用来创建一个file对象,记住:有了file对象,相关的方法才可以调用它进行读写。
其基本用法为:fileObject = open(xx, x)
这里,xx代表要打开的文件,x指的是参数。
(以下都省略了打开的文件)
open(, r):只读,不创建
open(, r+):读 + 写,不创建
open(, w):只写
open(, w+):写 + 读
open(, a):追加方式写(不覆盖)
open(, a+):追加方式写 (不覆盖)+ 读
即,加号'+'
代表额外方式
注:
- w+与r+区别
r+
:可读可写,若文件不存在,报错;w+
: 可读可写,若文件不存在,创建
write函数
write() 方法用于向文件中写入指定字符串,用法:fileObject.write(str)
read函数
fileObject.read()
:text ——> one whole str
fileObject.readline()
:one line ——> one str
fileObject.readlines()
:all line ——> one list with all lines
指针与seek函数
指针会随你的读写操作而向后移动
open
文件之后,指针就在文件内容的起始位置write
函数之后,指针就在写入的内容之后read
函数之后,指针在读取的内容之后,
例如使用read(),则指针会从起始位置移动,直到文件的末尾
所以,如果发现获取的并非自己想取的内容,很可能就是因为指针的位置不对。
这种情况,就应该使用 seek()
来指定指针的位置。
注:seek(0)
指向开头
扫描二维码关注公众号,回复:
13041173 查看本文章
2. 简单例子
这里的例子详细的介绍了 write、read、readline和readlines的用法。
open函数的w模式
和w+模式
- 首次写入
# 首次写入
with open('write_files.txt', 'w') as f1:
f1.write('1 2 3\n4 5 6') # 只要没有退出文件,就可以连续写入
f1.write('7 8 9')
with open('write_files_w+.txt', 'w+') as f2:
f2.write('a b c\nd e f') # 只要没有退出文件,就可以连续写入
f2.write('g h i')
结果:
(文件中写入的内容)
- 再次写入
# 再次写入
with open('write_files.txt', 'w') as f1:
f1.write('w模式,重新写入...') # 再次写入会完全清空之前的文件
# w模式下使用read函数会导致报错(io.UnsupportedOperation: not readable),因为 w 模式不可 读取
#lines = f1.read()
#print(lines)
with open('write_files_w+.txt', 'w+') as f2:
f2.write('w+模式,重新写入...') # 再次写入会完全清空之前的文件
f2.seek(0) # 将经过write之后的指针移到文件开头
red = f2.read()
f2.seek(0) # 将经过read之后的指针移到文件开头
readline = f2.readline()
f2.seek(0) # 将readline()之后的指针移动到文件开头
readlines = f2.readlines()
print(f'read: {red}') # read()读取所有的内容,并且将其作为一个完整的字符串
print(f'readline: {readline}') # readline()只读取一行内容,且是字符串格式
print(f'readlines: {readlines}') # readlines()读取所有行,并将内容放在一个list里(注:由于这里总共只有一行,所以没有用到 for in 来遍历这个列表)
控制台打印结果:
read: w+模式,重新写入...
readline: w+模式,重新写入...
readlines: ['w+模式,重新写入...']
文件中写入的内容:
open函数的a模式和a+模式
在这里插入代码片
- a 模式
# 1. a 模式
with open('write_file_a.txt', 'a') as f1:
f1.write('x y z\n1 2 3')
# w模式下使用read函数会导致报错(io.UnsupportedOperation: not readable),因为 w 模式不可 读取
# lines = f1.read()
# print(lines)
结果:
- a+模式
# 2. a+模式
# 首次
with open('write_file_a+.txt', 'a+') as f2:
f2.write('A B C')
lines = f2.read() # 这里是没有东西打印出来的,因为指针现在在最后面
print(lines)
# 再次
with open('write_file_a+.txt', 'a+') as f2:
f2.write('1 2 3')
f2.seek(0) # 将指针移到头部
lines = f2.read()
print(lines)
打印结果:
A B C1 2 3
3. json模块
import json
data = json.load(open('my_file.json', 'r'))
4. 文件操作
(等待完善)
参考: