三、Python之文件操作
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来,转载自(http://www.cnblogs.com/linhaifeng/articles/5984922.html)
文件的操作主要有打开文件、读取文件、修改或者生成文件
1. 打开文件 |
方法一:
fh=open('a.txt','r',encoding='utf-8') #1) 打开文件
data=fh.read() #2) 读取文件类容
fh.close() #3) 关闭文件
方法二:
with open('a.txt','r',encoding='utf-8') as fh: #1) 打开文件
data = fh.read() #2) 读取文件类容,这种方法不用关闭,程序会帮助关闭
2. 读取文件内容 |
文件的读取有以下三种方式:
fh.read() #光标移动到文件的末尾即一次性读取文件的所有内容,不建议使用
fh.readline() #光标移动到第二行首部,即每次读取文件的一行内容,建议使用
fh.readlines() #读取每一行内容,存放于列表中
3. 指定位置读取文件(read/seek/truncate) |
read、seek、tell、truncate等,下面主要介绍read和seek,用到了其他的再更新
read()文件打开方式为文本模式时,设置读取字符数;文件打开方式为b模式时,设置读取字节数
with open('a.txt','r',encoding='utf-8') as fh:
fh.read(2) #读取2个字符,默认打开凡是是文本模式:rb
with open('a.txt','rb',encding='utf-8') as fh:
fh.read(2) #读取2个字节
with open(r'test.png','rb') as fh: #读图片,bytes,b方式读,不管是什么文件(图片、视频、文本)都可以正常打开,只是打印是需要指定解码方式
print(fh.read())
seek() seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
a.txt内容如下:
1234567
abcdefg
with open('a.txt','r',encoding='utf-8') as fh:
print(fh.seek(3)) #3
4. 修改文件 |
import os
with open('a.txt','r',encoding='utf-8') as f1,open('a.txt.swap','w',encoding='utf-8') as f2:
for line in f1:
if 'alex' in line:
line = line.replace('aaa','bbb') #函数replace进行字符串替换,把文件中的'aaa'替换成'bbb'
f2.write(line)
os.remove('a.txt')
os.rename('a.txt.swap','a.txt')
5. 生成文件 |
fh.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
fh.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
fh.writelines(['333\n','444\n']) #文件模式,同时写入多行,以列表的形式
fh.writelines(('555\n','666\n')) #文件模式,同时写入多行,以元组的形式
fh.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
6. 其他文件操作函数 |
fh.readable() #文件是否可读
fh.writable() #文件是否可读
fh.closed #文件是否关闭
fh.encoding #如果文件打开模式为b,则没有该属性
f.hflush() #立刻将文件内容从内存刷到硬盘
fh.name #打印文件名称