1.对文件的操作流程
- 打开文件,得到文件句柄并且赋值给一个变量
- 通过句柄对文件进操作
- 关闭文件
2.文件的打开
在Python中,使用open函数,可以打开或者创建一个文件
f = open(‘test.txt’,mode=’r’,encoding = ‘utf-8’)
文件打开的访问模式如下
说明:
访问模式 |
说明 |
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
扫描二维码关注公众号,回复:
4426904 查看本文章
|
w |
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb |
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb |
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ |
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ |
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ |
以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
3.文件的关闭
使用close()函数关闭文件。
4.向文件中写入数据
要向文件中写入数据,可以使用write()函数进行写入操作。且写入的对象必须是str类型的。
f = open('test.txt', 'w') f.write('hello world, i am here!') f.close()
5.读取文件内容
5.1 read()函数
Python中使用read(num)函数从文件中读取数据,函数中的num参数表示读取num字节的内容。如果不传入,表示读取全部内容。
- 如果open是打开一个文件,那么可以不用书写打开的模式,只写 open('test.txt')
- 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
f = open('test.txt', 'r',encoding='utf-8') content = f.readable() if content: data = f.read(333) print(len(data)) print(data) f.close()
5.2 readline()函数
作用是读取文件中的一行。
示例:读取文件中的50行内容。
f = open('test.txt', 'r',encoding='utf-8') for i in range(50): data = f.readline() if len(data) > 0: print(data) else: pass
5.3 readlines()函数
就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素.
f = open('test1.txt', 'r',encoding='utf-8') datas = f.readlines() print(datas) # ['hello world, i am here!\n', 'wl,wwds'] for data in datas: print(data.replace('\n','')) # hello world, i am here! # wl,wwds
5.4 文件备份练习
输入文件的名字,然后程序自动完成对文件进行备份
oldFileName = input("请输入要拷贝的文件名字:") oldFile = open(oldFileName,'r') # 如果打开文件 if oldFile: # 提取文件的后缀 fileFlagNum = oldFileName.rfind('.') if fileFlagNum > 0: fileFlag = oldFileName[fileFlagNum:] # 组织新的文件名字 newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag # 创建新文件 newFile = open(newFileName, 'w') # 把旧文件中的数据,一行一行的进行复制到新文件中 for lineContent in oldFile.readlines(): newFile.write(lineContent) # 关闭文件 oldFile.close() newFile.close()
6.文件的定位读写
6.1 获取当前文件的读写位置
- f.tell—在读写文件的过程中,获取当前读写的位置。
# 打开一个已经存在的文件 f = open("test.txt", "r",encoding='utf-8') str = f.read(3) print("读取的数据是 : ", str) # 读取的数据是 : htt # 查找当前位置 pos = f.tell() print("当前文件位置 : ", pos) # 当前文件位置 : 3 str = f.read(3) print("读取的数据是 : ", str) # 读取的数据是 : ps: # 查找当前位置 pos = f.tell() print("当前文件位置 : ", pos) # 当前文件位置 : 6 f.close()
6.2 定位到文件中的某个位置
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset, from)有2个参数
1.offset:偏移量
2.from:方向
- 0:表示文件开头
- 1:表示当前位置
- 2:表示文件末尾
示例:把位置设置为:离文件末尾,3字节处
# 打开一个已经存在的文件 f = open("test.txt", "r") # 查找当前位置 pos = f.tell() print("当前文件位置 : ", pos) # 重新设置位置 f.seek(-3,2) # 读取到的数据为:文件最后3个字节数据 str = f.read() print("读取的数据是 : ", str) f.close()