Python学习之路(四):基础知识之文件操作

1.文件操作的函数

文件操作的函数大致为:f = open(文件名(路径), mode = "?", encoding="字符集")

  • f 可写成任意变量等,它被称作:文件句柄,文件操作符,或者文件操作对象

  • 其中文件的路径有两种:
  1. 绝对路径,从磁盘的根目录寻找路径,或者从互联网上找路径
  2. 相对路径(相对于当前程序所在的文件夹),在同一个文件夹互相访问,如下面的例子

  • 文件操作的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()

猜你喜欢

转载自www.cnblogs.com/Studying-Du/p/12349191.html