1.文件操作的函数
文件操作的函数大致为:f = open(文件名(路径), mode = "?", encoding="字符集")
- f 可写成任意变量等,它被称作:文件句柄,文件操作符,或者文件操作对象
- 其中文件的路径有两种:
- 绝对路径,从磁盘的根目录寻找路径,或者从互联网上找路径
- 相对路径(相对于当前程序所在的文件夹),在同一个文件夹互相访问,如下面的例子
- 文件操作的encoding应该是utf-8,这是因为在Python中默认编码为utf-8。
2.mode:文件操作的模式
打开文件的方式:
- r,w,a
- r+,w+,a+
- rb,wb,ab
- r+b,w+b,a+b
2.1 r模式:只读模式
1 f = open(‘什么.txt‘, mode=‘r‘, encoding=‘utf-8‘) # 文件的路径为同一文件夹中的文件,要查询外层文件夹应该在路径前加../ 2 s = f.read() 3 print(s) 4 f.close() # r模式下只读取到文件内容
1.readline()
readline()表示的是在读取目标文件时只读取文件中的一行,当文件比较庞大时,这时候想要读取文件中的内容,如果 全部读取就会占用时间和内存,不妨先读取一两行来看看是什么内容。
1 f = open("../day06/day07/01作业.py", mode="r", encoding="utf-8") 2 s = f.readline() # 一次读一行 3 print(s, end="\n") # 在打印的末尾默认有一个换行,所以每打印一行,就会有一行空格 4 s = f.readline() # 一次读一行 5 print(s) 6 s = f.readline() # 一次读一行 7 print(s) 8 s = f.readline().strip() # 可以去掉打印后面的空白 9 print(s) 10 s = f.readline() # 一次读一行 11 print(s) 12 s = f.readline() # 一次读一行 13 print(s) 14 f.close()
readline()可以实现类似文件监听的效果
1 f = open("马刺/马刺球员", mode="r", encoding="utf-8") 2 while 1: 3 s = f.readline().strip() 4 if s!= "": 5 print("内容是", s) 6 f.close()
也可以用for循环一行行地处理文件
1 f = open("马刺/马刺球员", mode="r", encoding="utf-8") 2 for line in f: # 一行一行地处理文件 3 print(line) 4 f.close()
2.2 w模式
w模式是写模式,即向目标文件中写入部分内容,w模式下,如果你所操作的文件路径下的文件不存在,会自动创建相关文件,但是w模式下每写入内容一次,文件内以前所保存的内容就会被清空。
1 f = open("马刺/马刺球员", mode="w", encoding="utf-8") 2 f.write("于是民意\n") 3 f.write("益康密集") # 可以用\n写入多行,\n代表换行 4 f.flush() 5 f.close()
值得注意的是,在w模式下是不能执行read操作的。
2.3 a模式
a模式即追加模式,不论文件中光标处于何种位置,都是在文件末尾写入部分内容。
1 f = open("马刺/马刺球员", mode="a", encoding="utf-8") 2 f.write("于是民意\n") 3 f.write("益康密集") # 可以用\n写入多行 4 f.flush() 5 f.close()
2.4 rb/wb/ab
rb, wb, ab, 用于处理非文本文档,比如图片等,读取的不是文件的内容,而是读取byte形式.可以用于上传文件,且encoding不赋值
1 f = open("C:\\pdd.jpg", mode="rb") # 此时encoding不赋值 2 e = open("D:\\pdd.jpg", mode="wb") # 在python中\表示转义,两个\\表示一个3 for line in f: 4 e.write(line) # 此处line不一定只读取一行,不知道读取多少,但是读取的数据是完整的 5 f.close() # 并且在写入的时候在文件内容的末尾写入 6 e.flush() 7 e.close()
2.5 r+
r+模式代表读写模式,默认顺序为先读后写
1 f = open("马刺/马刺球员", mode="r+", encoding="utf-8") 2 f.write(‘葫芦娃‘) # 虽然r+模式在写入的时候在文件内容的末尾写入,但如果在一开始就写入,便会根据光标写入 3 s = f.read() # 读取时只会读到写入内容后的文件内容 4 print(s) 5 f.close()
在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入或者操作文件的时候都是在结尾进行的操作.
2.6 w+模式
1 f = open("马刺/马刺球员", mode="w+", encoding="utf-8") 2 f.write(‘葫芦娃舅爷爷‘) 3 f.seek(0) 4 s = f.read() 5 print(‘俺输入的内容是:‘, s) 6 f.flush() 7 f.close()
w+模式下,依然会将文件原来的内容清空,所以用的很少。
2.7 a+模式
1 f = open("马刺/马刺球员", mode="a+", encoding="utf-8") 2 f.write(‘葫芦娃舅爷爷‘) # a+在文档末尾追加内容,但是读取的时候需要将光标移动到文档头部进行读取,否则光标在末尾,读取不到文档内容 3 f.seek(0) 4 s = f.read() 5 print(‘俺输入的内容是:‘, s) 6 f.flush() 7 f.close()
3. 光标操作
- seek(偏移量, 位置) 0:开头; 1:中间; 2:末尾seek(0,2) # 在末尾的偏移量是0
- tell() 告诉光标现在在哪里
- truncate() 截断文件
3.1 seek
1 f = open("马刺/马刺球员", mode="r", encoding="utf-8") 2 for line in f: 3 print(line.strip()) # 连续读取文件在之前要将光标移动到文档开头 4 f.seek(0) 5 for line in f: 6 print(line.strip()) 7 f.close()
1 f = open("马刺/马刺球员", mode="r", encoding="utf-8") 2 f.seek(3) # 在开头移动3个byte,3byte对应一个中文 3 s = f.read(1) # 读取一个字符 4 print(s) 5 f.close()
3.2 tell
1 f = open("马刺/马刺球员", mode="w", encoding="utf-8") 2 f.write(‘谁的青春不迷茫‘) # 在开头移动3个byte,3byte对应一个中文 3 f.seek(9) # 读取一个字符 4 print(f.tell())
3.3 truncate
从文件开头截断到光标位置
如果给参数,从头截尾到参数位置
1 f = open("马刺/马刺球员", mode="w", encoding="utf-8") 2 f.write("哈达迪") # 写入三个字符 3 f.seek(3) # 光标移动到3, 也就是第一个字末尾 4 f.truncate() # 删掉光标后面的所有内容 5 f.close()
原文地址:https://www.cnblogs.com/Studying-Du/p/12349191.html
时间: 2024-10-28 08:17:06