文件基本操作
文件对象名 = open(文件名, [,打开方式 [,缓冲区]])
缓冲区指定了读写文件的缓存模式,数值0表示不缓存,数值1表示缓存,如大于1则表示缓冲区的大小,默认值是缓冲模式。
文件打开模式
"""
模式 说明
r 读模式
w 写模式
a 追加模式
b 二进制模式(可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)
"""
文件对象常用属性
"""
属性 说明
Closed 判断文件是否关闭,若文件被关闭,则返回True
Mode 返回文件的打开模式
Name 返回文件的名称
"""
文件对象常用的方法
"""
方法 功能说明
#flush() 把缓冲区的内容写入文件,但不关闭文件
#close() 把缓冲区的内容写入文件,同时关闭文件,并释放文件对象
#read([size]) 从文件中读取size个字符的内容作为结果返回,如果省略#size则表示一次性读取所有内容
#readline() 从文件文本中读取一行内容作为结果返回
#readlines() 把文本文件中的每行文本作为一个字符串存入到列表中,返回该结果
#seek(offset[,whence]) 把文件指针移动到新的位置,offset表示相对于whence的位置。
whence=0表示从文件头开始计算,默认为0
whence=1表示从当前文件开始计算
whence=2表示从文件尾开始计算
#tell() 返回文件指针的当前位置
#truncate([size]) 删除从当前指针位置到文件末尾的内容。
如果指定了size,则不论指针在什么位置都只留下前size个字节,其余的删除
#write(s) 把字符串s的内容写入文件
#writelines(s) 把字符串列表写入文本文件,不添加换行符
"""
文本文件基本操作
>>> f = open('F:\\python文件操作.txt','a+')
>>> s = '写入内容2016年1月15日15:49:28'
>>> f.write(s)
22
>>> f.readlines()
[]
>>> f.readline()
''
>>> f.tell()
45
>>> f.seek(0)
0
>>> f.readlines()
['python文本文件\n', '写入内容2016年1月15日15:49:28']
>>> f.close()
with关键字
使用上下文管理关键字with可以自动管理资源,不论何种原因跳出with块,总能保证文件被正确关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
>>> s = '使用上下文管理关键字with可以自动管理资源'
>>> with open('F:\\python文本文件','a+') as f:
f.write(s)
f.seek(0)
f.readlines()
22
0
['使用上下文管理关键字with可以自动管理资源使用上下文管理关键字with可以自动管理资源']
读取文本文件
def readtextfile():
f = open('F:\\python文本文件.txt','r')
while True:
line = f.readline()
if line == '':
break
print(line)
f.close()
def readtextfile2():
f = open('F:\\python文本文件.txt','r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
二进制文件基本操作
序列化是指把内存中的数据在不丢失其类型信息的情况下转成对象的二进制形式表示的过程,对象序列化后的形式经过正确的反序列化过程应该能够准确地恢复为原对象。
Python中常用的序列化模块有struct、pickle、json、marshal和shelve,其中pickle有C语言实现的cPickle,速度约提高1000倍,应优先考虑使用。
pickle模块
pickle是较为常用并且速度非常快的二进制文件序列化模块。
pickle模块进行对象序列化和二进制文件读写。
用pickle写入二进制文件
import pickle
def writeBinFile():
f = open(r'F:\binary.bat','wb')
n = 7 #表示后面要写入的文件个数
i = 130000
a = 99.0001
s = '小周周'
aList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
aTuple = (-15,12,56)
coll = {1, 3, 5}
dic = {'a':1, 'b':2, 'c':3}
try:
pickle.dump(n,f) #表示后面要写入的文件个数
pickle.dump(i,f) #把i转换成字节串,并写入文件
pickle.dump(a,f)
pickle.dump(s,f)
pickle.dump(aList,f)
pickle.dump(aTuple,f)
pickle.dump(coll,f)
pickle.dump(dic,f)
except:
print('写入二进制文件异常')
finally:
f.close()
用pickle读出二进制文件
def readBinFile():
f = open(r'F:\binary.bat','rb')
n = pickle.load(f) #读出文件的数据个数
count = 0
while count < n:
x = pickle.load(f)
print(x)
count += 1
f.close()
>>> writeBinFile()
>>>
>>> readBinFile()
130000
99.0001
小周周
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
(-15, 12, 56)
{1, 3, 5}
{'c': 3, 'b': 2, 'a': 1}
struct模块
使用struct模块读写二进制文件
import struct
def writeBinFileByStruct():
n = 100001
x = 19.00012
b = True
s = 'python'
sn = struct.pack('if?',n,x,b) #把整数n、浮点数x、布尔对象b依次转换为字节串
f = open(r'F:\binary2.bat','wb')
f.write(sn) #写入字节串
#f.write(s) #字符串可以直接写入
f.close()
def readBinFileByStruct():
f = open(r'F:\binary2.bat','rb')
sn = f.read(9)
tu = struct.unpack('if?',sn) #从字节sn中还原出1个整数、1个浮点数和1个布尔值,并返回元组
print(tu)
n = tu[0]
x = tu[1]
b = tu[2]
print('n=',n)
print('x=',x)
print('b=',b)
# = f.read(9)
f.close()
#print('s=',s)
>>> writeBinFileByStruct()
>>> readBinFileByStruct()
(100001, 19.000120162963867, True)
n= 100001
x= 19.000120162963867
b= True
文件和目录操作
Python提供了os/os.path/shutil等大量模块支持文件级的操作。
os模块的常用文件操作方法
os.path模块的常用文件操作方法
shutil模块的常用文件操作方法
>>> import os
>>> dir(os)
>>> import os.path
>>> dir(os.path)
>>> import shutil
>>> dir(shutil)
>>> import os
>>> import os.path
>>> os.path.exists(r'F:\binary.bat')
True
>>> os.rename(r'F:binary.bat',r'F:\binaryNewName.bat')
>>> os.path.exists(r'F:\binaryNewName.bat')
True
>>> import shutil
>>> shutil.copyfile(r'f:\python文本文件.txt',r'f:\python文本文件_bak.txt')
'f:\\python文本文件_bak.txt'
文件读写应用
"""计算文本文件中最长行的长度"""
#方法一
def maxLen():
f = open(r'f:\python文本文件.txt','r')
allLineLens = [len(line.strip()) for line in f]
#strip()函数可以去掉字符串两端的空白字符
longest = max(allLineLens)
print(longest)
f.close()
#方法二
def maxLen2():
f = open(r'f:\python文本文件.txt','r')
longest = max(len(line.strip()) for line in f)
print(longest)
f.close()
"""读取文本文件"""
def readtext():
f = open(r'f:\python文本文件.txt','r')
for line in f:
print(line)
f.close()
计算字符串MD5值,MD5值可以用来判断文件发布之后是否被篡改,对于文件完整性保护具有重要意义。
用xlwt模块和xlrd模块可以写入、读取Excel文件,这两个模块需要使用pip安装。
pywin32模块也可以对Excel文件操作,这个模块也需要使用pip安装。