工作中,对文件的读写是非常频繁的,不管是从文件中读取数据,还是将数据写到文件中,都很频繁。本文介绍Python中的文件读写操作方法。
一、文件打开与关闭方法
在python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
语法:open(文件名,访问模式)
访问模式:
r 以只读方式打开文件,文件的指针将会放在文件的开头。打开文件后,从文件的开头开始读取数据。
w 打开一个文件只用于写入。文件的指针也是在文件的开头,如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
此外,还有很多其他模式:rb,wb,ab,r+,w+,a+,rb+,wb+,ab+,不一一介绍了。
使用close()函数关闭文件。
# 新建一个文件,文件名为:file_a.txt,用于写入内容
f = open('file_a.txt', 'w')
# 关闭这个文件
f.close()
二、文件的读写操作
打开一个文件后,我们就可以对文件进行读写操作了。
1.写数据(write)
使用write()可以完成向文件中写入数据。
f = open('file_b.txt', 'w')
# 写入内容
f.write('当我和拥挤的人群一同在路上走过时,\n我看见您从阳台上送过来的微笑,\n我歌唱着,\n忘却了所有的喧哗')
f.close()
注意:
运行代码后,如果文件不存在则创建,如果存在那么就打开文件。
如果文件访问模式是w,没有内容就会写入内容,有内容会覆盖内容,如果文件访问模式是a,没有内容会写入,有内容会追加。
2.读数据(read)
使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
f = open('file_b.txt', 'r')
# 读取
content = f.read(15)
content_all = f.read()
print('content: ', content)
print('content_all: ', content_all)
f.close()
运行结果:
content: 当我和拥挤的人群一同在路上走过
content_all: 时,
我看见您从阳台上送过来的微笑,
我歌唱着,
忘却了所有的喧哗
注意:
如果open打开一个文件用于读取内容,那么可以不用写打开的模式,即只写 open('file_b.txt')
如果读了多次,那么后面读取的数据是从上次读完后的位置开始的。
三、按行读取文件
1.按行读取所有数据(readlines)
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为列表的一个元素。
2.按行读取数据(readline)
readline可以按照行的方式读取文件中的内容,会从文件的第一行开始读,多次读取就会依次向下读取,当没有内容时返回None。
如果在readline()中传入一个数字num作为参数,那么会返回读取行的前num个字符。
这里我们使用上下文管理器来打开文件。
with open('file_b.txt', 'r') as f:
content_list = f.readlines()
print('content_list: ', content_list)
with open('file_b.txt', 'r') as f:
content_line1 = f.readline()
print('content_line1: ', content_line1)
content_line2 = f.readline()
print('content_line2: ', content_line2)
运行结果:
content_list: ['当我和拥挤的人群一同在路上走过时,\n', '我看见您从阳台上送过来的微笑,\n', '我歌唱着,\n', '忘却了所有的喧哗']
content_line1: 当我和拥挤的人群一同在路上走过时,
content_line2: 我看见您从阳台上送过来的微笑,
四、定位读取位置
1.在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取。每个中文占的位置为2。
with open('file_b.txt', 'r') as f:
content_line = f.readline()
# 获取当前位置
position = f.tell()
print(position)
2.如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset, from)有两个参数,offset:偏移量,from:读取位置(0:表示文件开头,1:表示当前位置,2:表示文件末尾)
with open('file_b.txt', 'r') as f:
position = f.tell()
print(position)
f.seek(10, 0)
position = f.tell()
print(position)
五、文件的其他操作
有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这些功能。
1.文件重命名
os模块中的rename()可以完成对文件的重命名操作
rename(需要修改的文件名, 新的文件名)
import os
os.rename("file_b.txt", "file_c.txt")
2.删除文件
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)
os.remove("file_a.txt")
3.创建文件夹
os.mkdir("files")
4.获取当前目录
print(os.getcwd())
5.改变默认目录
os.chdir("files")
6.获取目录列表
print(os.listdir())
7.删除文件夹
os.rmdir("files")