文件结构_遍历_压缩_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)
删除所有的 .txt 文件 

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()

 

posted @ 2020-03-23 01:07  这么神奇  阅读(338)  评论(0)    收藏  举报