python 3 基础之文件操作
文件操作
文件的读写操作需要借用函数 open() 完成
使用格式:open(文件名,访问模式)
下面是访问模式对照表
访问模式 | 说明 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
w |
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件的操作流程:
打开文件(创建文件)——>文件读写——>关闭文件
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的;
用什么方式打开的文件就只能干什么,如:不能用写的方式打开文件去读取文件
1、文件的读取
打开一个文件filename.txt,用只读模式打开
# 以只读模式 打开文件filename f = open('filename.txt','r') print(f.read()) f.close()
2、文件的写入(也可以用于创建一个新文件)
打开一个新的文件并写入内容(多行内容写入可以用三引号保持文本格式)
# 以写入模式写入内容 f = open('lianxi.txt','w') f.write('''tar -xvf filename select * from students select * from students order by ageselect * from students order by age limit 1 create function liaotian ()''') f.close()
创建一个新的文件
# 创建一个空的文件xinfile.txt f = open('xinfile.txt','w') f.close()
在文件末尾追加字符串
f = open('lianxi.txt', "a") f.write("nihao") f.close()
3、文件常用的方法
3.1、readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
f = open('lianxi.txt','r') print(f.readlines()) f.close() =============================== 运行结果:['tar -xvf filename\n', 'select * from students\n', 'select * from students order by ageselect * from students order by age limit 1\n',
'create function liaotian ()']
3.2、readline()
读取打开文件的第一行
3.3、write()
用于文件的写入,请看第 2 段内容
3.4、tell()
返回文件的当前位置,即文件指针当前位置;在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取
f=open('/tmp/passwd',mode='r') #以只读模式打开/tmp目录下的passwd文件 print(f.tell()) #输出0 content=f.read() print(content) print(f.tell()) #输出2287,即文件的末尾 f.close() #文件操作之后,必须关闭文件
3.5、seek()
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()。
seek(offset,from)有2个参数
offset:偏移量
from:方向
其中偏移量小于0,表示左移(比如-1表示左移1位);偏移量为0,表示不动;偏移量大于0,表示右移(比如1表示右移1位);其中from表示方向(0表示文件开头;1表示当前位置;2表示文件末尾)
此方法参考:https://blog.csdn.net/qq_42303254/article/details/86608779
f=open('/tmp/passwd',mode='r') #以只读模式打开/tmp目录下的passwd文件 print(f.tell()) #输出0 content=f.read() print(content) print(f.tell()) #输出2287,即文件的末尾 f.seek(1,0) #表示将指针移到文件的开头,再向右移一个字节(即移到字节为1的位置 print(f.tell()) #输出1 print(f.read()) #输出第一个字节后面所有的文件内容 f.close() #文件操作之后,必须关闭文件
3.6、read()
read() 默认用于读取整个文件的内容,read(3) 若输入参数,则为读取的字符个数
f = open('lianxi.txt','r') # 读取整个文件内容 print(f.read()) # 读取10个字符 # print(f.read(10)) f.close()
4、文件读写中文(编码)和中文解码
写入数据(默认情况win系统(中国)保存中文,编码格式为gbk),(mac电脑或者是linux 没有问题)
用write写入中文文件内容的时候,若未用encoding声明utf-8,读取数据时也不用,可以用read等方法读取成功,显示也没问题;但直接打开文件时显示的是乱码
用write写入中文内容时,若用encoding声明utf-8,读取数据时也必须要用encoding声明,否则报错或者是读取的是乱码
# 在文件后追加内容有中文,需要编码,用encoding=声明 k = open('lianxi.txt','a',encoding='utf-8') k.write('\n中国广东省') k.close() # 文件读取时有中文,需要用encoding= 解码,否则会有乱码 f = open('lianxi.txt', "r",encoding='utf-8') print(f.read()) f.close()
5、执行完with语句内容之后,自动关闭文件对象
with语句打开文件时可以起个别名,单个文件别名后面用冒号,多个文件打开用逗号和反斜杠 ,\ 隔开;格式如下
with open(文件名,模式) as 别名,\
open(文件名,模式) as 别名:
操作内容
''' 案例:将/tmp/passwd文件中的内容复制到/tmp/passwdbackup文件中 ''' #同时打开两个文件对象 with open('/tmp/passwd') as f1,\ open('/tmp/passwdbackup','w+') as f2: #将第一个文件的内容写入到第二个文件中 f2.write(f1.read()) #移动指针到文件最开始 f2.seek(0,0) print(f2.read())
6、制作 文件的备份
文件备份的步骤:打开文件——>读取文件数据——>创建一个源文件的复制文件——>把文件读取复制到备份文件中
示例代码:
# 使用with语句 with open('filename','r') as f,\ open('filename[复件]','w') as ff: ff.write(f.read())
7、文件的相关操作
对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主要接口
用人话说就是:想要对文件进行重命名、删除、创建文件夹等操作,需要先导入python的OS模块,接着用点方法进行操作
7.1、文件的重命名 (在同级目录文件下运行)
格式:os.rename('旧文件名' ,'新文件名')
# 导入模块OS import os # 重命名 os.rename('hm.txt','xuexi.txt')
7.2、删除文件
os模块中的remove()可以完成对文件的删除操作
格式:os.remove('文件名')
import os os.remove('hm.txt')
7.3、创建文件夹
格式:os.mkdir('文件夹名')
import os os.mkdir('filename')
7.4、获取当前目录
格式:os.getcwd()
import os print(os.getcwd())
7.5、删除空文件夹
格式:os.rmdir('空文件夹名称')
import os os.rmdir('空文件夹名')
7.6、获取目录列表
格式:os.listdir()
import os print(os.listdir())
7.7、指定操作目录(在当前目录下,可以用此方法去非当前目录下操作文件)
格式:os.chdir('目录')
import os # 把操作的目录指定为 /mnt/soft os.chdir('/mnt/soft') ret = os.getcwd() print(ret)
关于文件的其他一些操作,请看:https://blog.csdn.net/qq_42303254/article/details/86608779
8、批量操作文件
批量创建文件
import os # 当前目录下创建一个文件夹 os.mkdir('批量文件') # 指定默认目录 os.chdir('批量文件') print(os.getcwd()) # 在批量文件里创建10个文件 for i in range(1,11): #打开文件 f=open('piliangwenjian%s.txt' % i,'w') #关闭文件 f.close()
批量改名
import os # 批量修改文件名 # 1.先指定默认目录 os.chdir('批量文件') # 2.获取当前目录下的目录列表(即‘批量文件’目录下的目录列表) my_list = os.listdir() print(my_list) # 3.遍历my_list for filename in my_list: newfilename = filename.replace('.txt','[中国].txt') os.rename(filename,newfilename) # 多次运行不会报错,只会继续把文件名继续修改
9、文件操作常用的模式
常用打开模式:
r 只能读
r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
w 只能写,覆盖整个文件,不存在则创建
a 只能写,从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
但是实验发现,这里的r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容
不完整
此节参考自:https://www.cnblogs.com/yangshl/p/6285942.html