投稿作者:Huang supreme
編輯整理:JackTian
微信公衆號:傑哥的IT之旅(ID:Jake_Internet)
投稿作者文章導讀:
1、“羅永浩抖音首秀”銷售數據的可視化大屏是怎麼做出來的呢?
2、利用 Python 進行多 Sheet 表合併、多工作簿合併、一表按列拆分
1、輸出目錄下所有文件及文件夾
1)os.getcwd():獲取當前python程序的運行路徑
import os
os.getcwd()
結果如下:
2)路徑中斜槓(/)和反斜槓()的說明
3)os.path.join():自動連接路徑(不同的操作系統,連接符不同)
os.path.join("My Project","Demo")
"C:\\" + os.path.join("My Project","Demo")
結果如下:
4)絕對路徑和相對路徑
5)os.listdir()與os.isdir()
os.listdir():列出當前程序文件夾下的所有文件和文件夾;
os.scandir():os.listdir()的一種更好的替代方法,返回的是一個迭代器。注意:我們可以採用循環迭代其中的每一個元素,os.scandir()有兩個特殊的屬性和一個方法,我們在下面的例子中,進行演示。
os.listdir()
os.scandir()
for item in os.scandir():
print(item.name,item.is_dir(),"\n\t",item.path)
結果如下:
其實,os.listdir()或者os.scandir()其實可以傳入一個路徑,然後獲取指定路徑下的文件或者文件夾。
os.listdir("G:\\6Tipdm\\Python集訓營_情感分析")
for item in os.scandir("G:\\6Tipdm\\Python集訓營_情感分析"):
print(item.name,item.is_dir(),"\n")
結果如下:
2、遍歷、搜索文件及查詢文件信息
1)找出文件夾裏的文件夾裏的“文件”或“文件夾”
① os.walk(路徑):傳入一個路徑,幫助我們將文件夾裏的文件夾裏的文件夾裏的文件都找出來。
for dirpath, dirnames, files in os.walk("./"):
print(f"發現文件夾\t{dirpath}")
print(files)
-----------------------------------------------
for dirpath, dirnames, files in os.walk("./"):
print(f"發現文件夾\t{dirpath}")
print(dirnames)
"""
dirpath是文件夾路徑
dirnames是dirpath這個文件夾下的子文件夾列表
files是dirpath這個文件夾裏的文件列表
"""
結果如下:
2)搜索、匹配文件名稱及文件信息查看
① 方法一:startswith()和endswith()
字符串A.startswith(字符串B):字符串A是否以字符串B開頭;
字符串A.endswith(字符串B):字符串A是否以字符串B結尾;
"abc.txt".startswith("abc")
"abc.txt".endswith(".txt")
------------------------------------------------------
list1 = ["a.txt", "b.py", "c.xlsx", "d.txt", "e.txt"]
for item in list1:
if item.endswith(".txt"):
print(item)
結果如下:
② 方法二:glob模塊
該模塊可以採取類似於“正則”的方式,進行文件匹配,用起來很方便。
代碼如下:
for i in glob.glob("*.txt"):
print(i)
---------------------------
for i in glob.glob("a*.txt"):
print(i)
---------------------------
for i in glob.glob("a?.txt"):
print(i)
---------------------------
for i in glob.glob("a??.txt"):
print(i)
結果如下:
特別的:glob()方法中還有一個參數recursive = True,能夠將所有深層文件夾裏面,符合條件的文件給你找出來。
# 注意:一個*和兩個*的區別
glob.glob("*/*.txt",recursive=True)
glob.glob("**/*.txt",recursive=True)
結果如下:
③ os.scandir()返回的文件都可以利用stat()方法,進行查看
代碼如下:
for file in os.scandir():
print(file.name, file.stat(), "\n")
結果如下:
接着,我們獲取上述幾個常用屬性看看。
import time
for file in os.scandir():
print(file.name, file.stat().st_size, time.ctime(file.stat().st_ctime), "\n")
結果如下:
3、批量創建、複製、移動、刪除、重命名文件及文件夾
1)創建文件夾
os.mkdir("新文件夾名稱"):創建單層文件夾;
os.makedirs("第一層/第二層/第三層"):創建多層文件夾;
list1 = ["文件夾{}".format(i) for i in range(5)]
for i in list1:
os.mkdir(i)
結果如下:
問題:當某個文件夾已經存在的時候,運行此代碼,會報錯。此時可以添加一個判斷條件
(os.path.exists("新文件夾名稱"))。
if not os.path.exists("傻逼"):
os.mkdir("傻逼")
結果如下:
2)複製文件及文件夾(shutil模塊兒)
shutil.copy("要複製的文件", "要複製到的位置"):複製文件;
shutil.copytree("要複製的文件夾", "要複製到的新文件夾的位置"):複製文件夾;
① 複製文件
shutil.copy("要複製的文件", "要複製到的位置");
操作如下:
import shutil
# 將aba.txt複製一份到project文件夾中。
shutil.copy("aba.txt", "./project")
# 將aba.txt複製一份到project文件夾中,並重新命名爲“新名字.txt”。
shutil.copy("aba.txt", "./project/新名字.txt")
結果如下:
② 複製文件夾:相當於重命名文件夾
shutil.copytree("要複製的文件夾", "要複製到的新文件夾的位置");
注意:將某個文件夾移動到另外一個文件夾(該文件夾必須是新文件夾),不能是已經存在了的文件夾;
操作如下:
import shutil
shutil.copytree("project", "./qq")
結果如下:
3)移動文件或文件夾
shutil.move("要移動的文件或文件夾","要移動到的位置"):移動文件/文件夾;
文件夾或者文件被移動後,原始文件就沒有了;
① 移動文件
shutil.move("要移動的文件","要移動到的位置")
操作如下:
import shutil
# 將aba.txt移動到“傻逼”文件夾下
shutil.move("aba.txt","./傻逼/")
# # 將test.txt移動到“傻逼”文件夾下,並重新命名爲test1.txt
shutil.move("test.txt","./傻逼/test1.txt")
結果如下:
② 移動文件夾
shutil.move("要移動的文件夾","要移動到的位置")
操作如下:
import shutil
# 將“第一層”文件夾移動到“傻逼”文件夾下
shutil.move("第一層","./傻逼/")
# 將“qq”文件夾移動到“傻逼”文件夾下,並重新命名爲“哈哈”文件夾
shutil.move("qq","./傻逼/哈哈")
結果如下:
4)重命名文件或文件夾
os.rename("文件/文件夾","新文件名/新文件夾名")
操作如下:
import os
# 將test1.xlsx重命名爲“my.xlsx”
os.rename("test1.xlsx","my.xlsx")
# 將“傻逼”文件夾重命名爲“傻子”文件夾
os.rename("傻逼","傻子")
結果如下:
5)刪除文件或文件夾
① 刪除文件
os.remove("要刪除的文件")
注意:這裏說的只是刪除文件,而不能是文件夾;
操作如下:
import os
# 刪除“my.xlsx”文件
os.remove("my.xlsx")
結果如下:
② 刪除文件夾
shutil.rmtree("要刪除的文件夾")
操作如下:
import shutil
# 刪除“文件夾0”這個文件夾
shutil.rmtree("文件夾0")
結果如下:
4、創建和解壓壓縮包
注意:這裏所說的壓縮包,指的是“.zip”格式的壓縮包;
1)讀取壓縮包裏的文件
import zipfile
with zipfile.ZipFile("python辦公自動化.zip", "r") as zipobj:
print(zipobj.namelist())
-----------------------------------------------------------
# 注意:有時候需要寫成filename.encode("cp437").decode("gbk")
with zipfile.ZipFile("python辦公自動化.zip", "r") as zipobj:
for filename in zipobj.namelist():
print(filename.encode("gbk").decode("gbk"))
結果如下:
2)讀取壓縮包裏面的文件信息
import zipfile
with zipfile.ZipFile(r"G:\tableau書籍\Tableau文件.zip", "r") as zipobj:
for filename in zipobj.namelist():
info = zipobj.getinfo(filename)
new_filename = filename.encode("cp437").decode("gbk")
print(new_filename, info.file_size/1024/1024, info.compress_size/1024/1024)
結果如下:
3)解壓壓縮包
extract("壓縮包內要解壓的文件名","解壓到哪個位置"):將壓縮包內單個文件解壓出來;
extractall("解壓到哪個位置"):將壓縮包內所有文件解壓出來;
① 解壓單個文件
extract("壓縮包內要解壓的文件名","解壓到哪個位置")
import zipfile
# 將該壓縮包中的“a.txt”文件,單獨解壓到“傻子”文件夾下
with zipfile.ZipFile(r"G:\6Tipdm\7python辦公自動化\python辦公自動化.zip", "r") as zipobj:
zipobj.extract("a.txt","./傻子/")
結果如下:
② 解壓整個文件
extractall("解壓到哪個位置")
import zipfile
# 將該壓縮包整個解壓到“文件夾1”文件夾下
with zipfile.ZipFile(r"G:\6Tipdm\7python辦公自動化\python辦公自動化.zip", "r") as zipobj:
zipobj.extractall("./文件夾1/")
結果如下:
注意:如果你的壓縮包中“有密碼”,則採用以下方式進行解壓。
4)創建壓縮包
① 對某些文件,創建壓縮包
file_list = ["a.txt", "aa.txt", "文件夾1"]
# 將上述三個文件,進行打包,使用“w”
with zipfile.ZipFile(r"我創建的壓縮包.zip", "w") as zipobj:
for file in file_list:
zipobj.write(file)
結果如下:
② 壓縮包已經存在,往其中添加文件
# 往上述壓縮包中,再次添加一個新文件“傻子”文件夾,使用“a”
with zipfile.ZipFile(r"我創建的壓縮包.zip", "a") as zipobj:
for file in file_list:
zipobj.write("傻子")
結果如下: