1.常用的两种打开文件的方法(以d盘目录下x.txt文件为例)
#方法1:通过需要.close()进行关闭
f = open(r'd:\x.txt','r')
f.close()
#方法2:直接用with打开文件
with open(r'd:\x.txt','r') as f:
pass
2.常见的文件操作
(1)读写内容
#写入操作.write\.writelines
with open(r'x.txt','w') as f: #创建utf-8编码模式的系统文件
f.write('the firstline') #将中间内容写入文档
f.writelines(['one\n','two\n','three\n']) #将字符串列表写入文档,系统不会自动换行,需要手动输入转义字符
#读取操作.read\.readline\.readlines
with open(r'x.txt','r') as f:
print(f.read()) #空格中可以填写需要读取的字符,若为空,则默认读取全部文件
#readline的具体用法-读取一行内容,并作为结果返回
with open(r'x.txt','r') as f:
while True:
fragment = f.readline()
if not fragment:
break
print(fragment,end = '')
#readlines列表的遍历-读取所有内容,并返回一个列表,每一行为一个元素
with open(r'x.txt','r') as f:
list = f.readlines()
for line in list:
print(line,end = '')
#二进制文件的读取和写入
with open(r'day1\sdf.png','rb') as f:
with open(r'day1\sdf_copy.png','wb') as g:
for line in f.readlines():
g.write(line)
(2)读取文件对象的属性
with open('x.txt','r') as f:
print(f.name) #返回文件名称
print(f.mode) #返回文件打开模式
print(f.closed) #返回文件是否关闭
?
(3)指针操作
#指针操作
with open('x.txt','r') as f:
print(f.tell()) #返回指针位置
f.seek(3) #讲指针位置移动到第三个字节,前面的数为正则正向,为负则反向。后面的数不填默认为0,即从头开始,1从此处开始,2为从末尾。
print(f.tell())
print(f.readline(),end = '') #从指针位置开始,读取一行内容
print(f.tell())
(4)enumerate()函数的应用(操作每行增加行号)
#enumerate()函数的应用(操作每行增加行号)
with open('x.txt','r') as f:
lines = f.readlines()
list = [line.rstrip()+'#'+str(index+1)+'\n' for index,line in enumerate(lines)] #推导式生成列表,enumerate生成的是索引+元素构成元组作为元素的列表
with open('x.txt','w') as f:
f.writelines(list)
(5)pickle序列化
#pickle序列化
import pickle
a1 = [1,2,3,4,5]
a2 = (3,5,1)
a3 = 'asdqweqwe'
#序列化:
with open('x.dat','wb') as f: #按顺序序列化
pickle.dump(a1,f);pickle.dump(a2,f);pickle.dump(a3,f)
with open('x.dat','rb') as f: #按序列化的顺序反序列化
b1 = pickle.load(f);b2 = pickle.load(f);b3 = pickle.load(f)
print(b1);print(b2);print(b3)
(6)csv文件的读取和写入
#csv文件的写入和读取
import csv
headline = ['name','age','salary']
rows = [['Kryser',18,50000],['Lily',16,2000]]
with open('dd.csv','w') as f:
a_csv = csv.writer(f) #启用写入器
a_csv.writerow(headline) #写入一行
a_csv.writerows(rows) #写入多行,每行为列表的一个元素
with open('dd.csv','r') as f:
b_csv = csv.reader(f) #启用阅读器
for line in b_csv: #需要通过遍历打印
if line == []:
pass
else:
print(line)
?
3.os模块应用
(1)使用walk遍历工作目录下所有文件和目录的绝对路径
import os
all_file = []
path = os.getcwd()
lists = os.walk(path)
for dirpath, dirnames, filesname in lists:
for dir in dirnames:
all_file.append(os.path.join(dirpath,dir)) #目录的绝对路径
for file in filesname:
all_file.append(os.path.join(dirpath,file)) #文件的绝对路径
for f in all_file: #遍历当前工作目录下的所有文件及目录的绝对路径形成的路径
print(f)
(2)返回工作目录下的所有指定类型的文件名(以.py文件为例)
import os.path
path = os.getcwd()
list = os.listdir(path)
#method1
for file in list:
if file.endswith('py'):
print(file)
#method2
listc = [file for file in list if file.endswith('py')] #推导式生成列表
for f in listc:
print(f)
(3)遍历目录树
#遍历目录树
import os.path
all_files = []
def getAllFiles(path,level): #此函数旨在实现输出一个包含path下的所有子文件与子目录的绝对路径的列表,以及实现缩进
childFiles = os.listdir(path)
for file in childFiles:
filePath = os.path.join(path,file)
if os.path.isdir(filePath):
getAllFiles(filePath,level+1)
all_files.append(level*'\t'+filePath)
a = getAllFiles('day1',0) #调用函数
for f in reversed(all_files): #逆序遍历该列表
print(f)
(4)常用os模块
#常见的os方法:
import os
#1.os模块下系统读取的方法:
print(os.name) #windows返回nt,Linux返回posix
#2.os模块下常用操作文件的方法:
os.remove(r'day1\damn\33.mp4') #删除指定文件
os.rename('dd.csv','xx.csv') #重命名指定文件
print(os.stat(r'day1\x.txt')) #返回指定文件的所有属性(信息)
#3.os模块下关于目录操作的相关方法:
print(os.listdir('day1')) #返回一个列表,列表内容为制定目录下的一级子目录以及子文件
os.mkdir('新增目录') #创建一个新目录,若没有写路径,则默认路径为工作目录下
os.rmdir('新增目录') #删除指定目录
os.makedirs('澳大利亚\悉尼\悉尼大学') #创建多级目录
os.removedirs('澳大利亚\悉尼\悉尼大学') #删除多级目录
os.getcwd() #获取当前工作路径
os.chdir('d:') #改变工作路径到指定位置
print(os.sep) #返回当前操作系统所使用的分隔符
print(repr(os.linesep)) #返回当前操作系统所使用的换行符
#os.path模块
import os.path #或者from os import path
#1.判断
print(os.path.isabs(r'd:\x.txt')) #判断是否为绝对路径
print(os.path.isdir('day1\澳大利亚')) #判断是否为目录(文件夹)
print(os.path.isfile(r'day1\x.txt')) #判断是否为文件
print(os.path.exists(r'd:\x.txt')) #判断路径是否存在
#2.返回
print(os.path.getsize('x.txt')) #获取文件大小
print(os.path.abspath(r'd:\x.txt')) #获取文件的绝对路径
print(os.path.dirname(r'd:\x.txt')) #获取该文件的目录名称
print(os.path.getatime(r'd:\x.txt')) #获取最后一次访问时间
print(os.path.getmtime(r'd:\x.txt')) #获取最后一次修改时间
print(os.path.getctime(r'd:\x.txt')) #获取文件的创建时间
#3.切分或连接路径
print(os.path.join('a','b','c')) #把join里的字符用分隔符\连接起来
print(os.path.split(r'd:\x.txt')) #对路径进行分割,以元组形式返回(已经分割的目录路径+文件名)
print(os.path.splitext(r'd:\x.txt')) #同上,不过元组内容为已经分割的文件路径+后缀
4.shutil模块、zipfile模块
#shutil、zipfile模块
import shutil
#1.拷贝
shutil.copyfile('x.txt','x_copy.txt') #拷贝单个文件
shutil.copytree('day1\澳大利亚','day1\城市') #把一个目录拷贝到新建的目录
shutil.copytree('day1\澳大利亚','day1\metro',ignore = shutil.ignore_patterns('*.txt')) #功能同上,但是忽略掉指定类型的文件
#2.压缩
#shutil模块
shutil.make_archive('city','zip','day1') #将day1目录下的所有文件,以zip格式,压缩至当前工作目录下新创建的city文件中
#zipfile模块
#(1)压缩
import zipfile
z1 = zipfile.ZipFile('a.zip','w') #创建压缩文件a,格式为zip
z1.write('x.txt') #将x.txt写入压缩文件a中
z1.close()
#(2)解压缩
z2 = zipfile.ZipFile('a.zip','r') #创建并打开压缩文件a,采用读模式
z2.extractall('new') #将a压缩文件中所有的压缩内容解压,并存入名为new的文件中
z2.close()
|