簡體   English   中英

從帶有子文件夾的壓縮文件夾中提取.txt 文件並使用文件夾位置重命名文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM