![](/img/trans.png)
[英]How to unzip all folders/files that end in .zip and extract “file.txt” file from each zipped folder
[英]Extract .txt files from zipped folder with subfolders and rename files with folder location
從具有多個子文件夾的壓縮文件夾中提取.txt 文件,並根據文件位置重命名這些提取的文件。
第 1 步:壓縮文件提取
import os, zipfile,glob,shutil
插入可用壓縮文件夾的文件夾名稱
dir_name = r'C:\Users\user1\Documents\Extract .txt files\ZIPPED\\'
extension = '.zip'
os.chdir(dir_name) #change directory to point to this location
檢查.zip文件,解壓並解壓“ All Extracted Files ”文件夾中的所有文件
for item in os.listdir(dir_name): #loop through items in this dir
if item.endswith(extension): #check for ".zip" extension
file_name = os.path.abspath(item) #get full path of files
zip_ref = zipfile.ZipFile(file_name) #create zip_ref as zipfile object
zip_ref.extractall('All Extracted Files') #extract file to dir
zip_ref.close() #close file
FEED文件夾名稱 .txt 文件應保存在哪里
newpath = r'C:\Users\user1\Documents\Extract .txt files\ZIPPED\TXT Files\\'
if not os.path.exists(newpath): #if folder doesn't exist then create one
os.makedirs(newpath)
第 2 步:將 only.txt 文件復制到“TXT 文件”文件夾*
srcdir = r'C:\Users\user1\Documents\Extract .txt files\ZIPPED\All Extracted Files\\'
dstdir = r'C:\Users\user1\Documents\Extract .txt files\ZIPPED\TXT Files\\'
for root, dirs, files in os.walk(srcdir):
for file in files:
if file[-4:].lower() == '.txt':
shutil.copy(os.path.join(root, file), os.path.join(dstdir, file))
我被困在如何根據它們的位置/文件夾名稱重命名這些提取的文件。 例如:將doc1.txt重命名為Foldername_doc1.txt 。
任何想法請...
我強烈建議使用 Python 3.4+ 中可用的pathlib
模塊來做這種事情,因為它比使用os.path
中的函數更容易和更易讀所以我已經轉換了你的代碼來使用它。
雖然下面的代碼在我所做的相對簡單的測試中工作,但您需要注意一些事情/限制。 一是如果它處理多個.zip 文件,則處理較早的文件留下的內容可能會干擾其他文件。
另一個問題是,僅在文件名前加上其包含的子文件夾名稱並不能保證它是唯一的——文件夾層次結構中可能有兩個同名的子文件夾。 即/foo/bar/baz
和/foo/doo/baz
可能都有一個同名的文件,因此只需在該文件名前加上baz_
前綴不會使其與其他實例不同。
import glob
import os
from pathlib import Path
import shutil
import zipfile
# Where zipped folders are available.
dir_name = Path('C:/Users/user1/Documents/Extract .txt files/ZIPPED')
srcdir = dir_name / 'All Extracted Files'
dstdir = dir_name / 'TXT Files'
EXTENSION = '.zip'
# Check for .zip files, unzip and extract all files in "All Extracted Files" folder.
for item in os.listdir(dir_name):
filename = (dir_name / item).resolve() # Get full file path.
if filename.suffix.lower() == EXTENSION: # Zip file?
with zipfile.ZipFile(filename) as zip_ref:
zip_ref.extractall(srcdir) # extract files to dir
if not dstdir.exists(): # Create destination folder if it doesn't exist.
os.makedirs(dstdir)
# Copy only .txt files to destination "TXT Files" folder.
for root, dirs, files in os.walk(srcdir):
root = Path(root)
for file in files:
srcpath = root / file
if srcpath.suffix.lower() == '.txt': # Text file?
dstname = root.name + '_' + file # Prefix filename with source folder name.
dstpath = dstdir / dstname
shutil.copy(srcpath, dstpath)
print('Done')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.