文件结构_遍历_压缩_shutil_zip
目录的获取与更改
1. 文件夹分隔符
连接文件名称 & 文件夹名称的字符串;相当于在输入的字符间,增加系统默认的文件夹分隔符; WIN:\, OS X & Linix: /
调用 os.path.sep 返回当前系统的文件夹分隔符;
import os
print(os.path.join('c:\\','xinjian','adfas','naruto'))
--> 输出:c:\xinjian\adfas\naruto
2. 当前工作目录
print(os.getcwd()) # 获得当前工作目录
--> C:\Users\zhangkai\PycharmProjects\202001\20200408
os.chdir('c:\\')
print(os.getcwd())
--> c:\ 更换工作目录
3.绝对路径 & 相对路径
调用os.path.abspath(), 返回 相对路径的绝对路径;
import os
print(os.getcwd())
print(os.path.abspath(r'..\20200312'))
调用os.path.isabs(), 判断是否为绝对路径;以下例子返回 True;
import os
print(os.path.isabs(r"C:\Users\zhangkai\PycharmProjects\202001\20200312"))
调用os.path.relpath(path,start), 返回从start 到path 的相对字符串;下面示例返回:..\..\..\..\..\Program Files
import os
print(os.path.relpath("c:\\Program Files",r"C:\Users\zhangkai\PycharmProjects\202001\20200312"))
4. 路径与基本文件名
调用os.path.split(),将返回两个字符串的元组,也可使用 os.path.dirname() 和 os.path.basename() ,分别获得元组;举例如下:
1 print(os.path.split(r"C:\Program Files\Microsoft Office\File A.txt")) #返回:('C:\\Program Files\\Microsoft Office', 'File A.txt')
2 print(os.path.dirname(r"C:\Program Files\Microsoft Office\File A.txt")) #返回:C:\Program Files\Microsoft Office
3 print(os.path.basename(r"C:\Program Files\Microsoft Office\File A.txt")) #返回:File A.txt
向os.path.split()传入参数:os.path.sep, 将会按照文件分隔符分割,且所有系统适用;
import os
print((r"C:\Program Files\Microsoft Office\File A.txt").split(os.path.sep))
返回: ['C:', 'Program Files', 'Microsoft Office', 'File A.txt']
5. 文件夹内文件列表
调用 os.listdir(r"C:\Users\zhangkai"),可以得到文件夹下的文件列表(包含文件夹 & 文件);
调用 os.path.getsize() ,可以得到指定文件的大小;单位 B;
import os
print(os.listdir(r"C:\Users\zhangkai"))
print(os.path.getsize(r"C:\Users\zhangkai\NTUSER.DAT"))
6. 检查路径有效性
调用os.path.exists(r"C:\Users\zhangkai\PycharmProjects\202001\data.xlsx"), 返回路径是否存在,可以用来检查是否插入了U盘;
调用os.path.isdir(r"C:\Users\zhangkai\PycharmProjects\202001\data.xlsx"),返回路径是否是文件夹
调用os.path.isfile(r"C:\Users\zhangkai\PycharmProjects\202001\data.xlsx"),返回路径是否是文件
Shutil 模块
备注:source,destination 全部为字符串;文件或文件夹的路径;
1. 复制文件 & 文件夹
shutil.copy(source,destination) 复制一个文件source(文件),到destination的位置;返回值为新文件路径;
1 import shutil,os 2 os.chdir(r'D:\') # 指定目标文件夹 3 shutil.copy(r'D:\123.txt',r'D:\document') #复制文件到指定文件夹 4 shutil.copy(r'D:\123.txt',r'D:\document\456.txt') #复制文件到指定文件夹并重命名为456.txt
shutil.copytree(source,destination) 复制一个文件夹source(文件夹及其中的文件全部会被复制),到destination的位置;返回值为新文件夹路径;
1 import shutil,os 2 os.chdir(r'D:\') # 指定目标文件夹 3 shutil.copytree(r'D:\',r'D:\document\') #复制文件夹到指定文件夹
2. 移动文件 & 文件夹
与copy的使用方法完全一致,可以实现移动+重命名;
3. 永久删除文件 & 文件夹 (不会出现在垃圾箱,不建议使用)
1 os.unlink(path) #将path处的文件删除; 2 os.rmdir(path) #将path处的文件夹删除;文件夹必须为空; 3 shutil.rmtree(path) #将path处的文件夹删除,包含其中的文件,文件夹
1 # 删除所有的 .txt 2 import os 3 os.chdir(r'D:\Learning Material\Python\Sample\log_miniline') 4 for filename in os.listdir(): # 只能列出文件夹的文件或文件夹,无法包含子文件夹的内容; 5 if filename.endswith('.XML'): 6 os.unlink(filename)
4. 删除文件 & 文件夹 (会出现在垃圾箱,建议使用)
使用第三方模块 send2trach,比python常规的删除安全的多;会将删除的东西发送到垃圾桶;path为字符串;
1 import send2trash 2 send2trash.send2trash(path)
遍历目录树
os.walk(path) 其中:path为文件夹路径,可以使用一个for循环遍历目录树;os.walk() 会返回三个值;
1. 当前文件夹名称,该函数会逐一访问文件夹,并返回folderName,subfolders,filenames
2.当前文件夹中子文件夹的字符串列;
3. 当前文件夹中文件的字符串列表;
举例:
1 import os 2 for folderName,subfolders,filenames in os.walk("D:\Learning Material\Software"): 3 print("The current folder is " + folderName) 4 for subfolder in subfolders: 5 print("SUBFOLDER OF "+ folderName +":"+subfolder) 6 for filename in filenames: 7 print("FILE INSIDE "+folderName+":"+filename)
zip文件
1. 读取zip文件
要读取一个zip文件,必须先创建一个ZipFile的对象;调用一个 zipfile.ZipFile('zipfile') zipfile为zip文件的路径字符串;
1 import zipfile, os 2 3 os.chdir(r'D:\Sample') 4 exampleZip = zipfile.ZipFile(r'log_miniline.zip') 5 print(exampleZip.namelist()) 6 zipInfo = exampleZip.getinfo(r'log_miniline/line1/line1-1.txt') # ZipFile的对象getinfo 7 print(zipInfo.file_size) # 显示压缩文件中对应文件的大小 8 print(zipInfo.compress_size) # 显示压缩文件中对应文件的压缩后的大小 9 zipfile.close() # 关闭对象
2. 解压zip文件
要解压一个zip文件,必须先创建一个ZipFile的对象;
1 import zipfile, os 2 os.chdir(r'D:\Sample') 3 exampleZip = zipfile.ZipFile(r'log_miniline.zip') 4 exampleZip.extractall() #解压所有文件 5 exampleZip.extract('log_miniline/line1/') #解压单个文件夹,文件夹中无内容; 6 exampleZip.extract('log_miniline/line2/line2-1.txt') #解压单个文件 7 exampleZip.close()
3. 创建和添加zip文件
要创建一个zip文件,必须先以‘写模式“创建一个ZipFile的对象;写模式有两种参数,w为覆盖模式;a为追加模式;
.write() 有一个参数 compress_type 使用默认值就好;参考下面例子;
1 import zipfile 2 #zip创建和添加 3 newZip=zipfile.ZipFile("newzip.zip","w") # w 为写模式,所以会覆盖原来的内容;如果只是想添加到zip文件中,则使用'a' 4 newZip.write('log_miniline/line2/line2-1.txt',compress_type=zipfile.ZIP_DEFLATED) # 将文件加入Zip 5 newZip.close()

浙公网安备 33010602011771号