每個人。我對 Python 很陌生,所以我需要一些幫助。我在檔案中有一個檔案夾名稱串列.CSV。所有這些檔案夾都在同一路徑內。我需要單獨壓縮它們(每個都需要成為一個.ZIP檔案,保持自己的原始名稱),并在壓縮后洗掉原始檔案夾。
在這里嘗試了一些東西,但沒有成功:(
我讀到了zipfiles, os.walk, import csv, 但我無法把這些東西放在一起。
有人可以幫我解決這個問題嗎?
代碼在這里。我真的很抱歉,這可能沒有意義。我真的是一個初學者:(
import os
import zipfile
import csv
import sys
os.chdir('dir')
files='dir'
for i in range (len(files)):
with zipfile.ZipFile(files(i) '.zip', 'w') as zipMe:
zipMe.write(files[i], compress_type=zipfile.ZIP_DEFLATED)
uj5u.com熱心網友回復:
- 呼叫該
read_csv()函式以打開 CSV 檔案并將目錄名稱從 CSV 讀取到名為dir_names. - 該
read_csv()函式呼叫該zip_dirs()函式并傳遞dir_names包含目錄名稱的串列。該zip_dirs()函式將每個目錄壓縮成一個 zip 檔案并保存。 - 該
zip_dirs()函式呼叫該delete_dirs()函式并洗掉原始目錄。
import os
import csv
import zipfile
dir_names = []
zip_out = 'dirs.zip'
dir_csv = 'dir_names.csv'
parent_dir = 'dir-to-zip/'
# delete directories
def delete_dirs(dir_names):
for dir in dir_names:
os.rmdir(parent_dir dir)
# zip directories
def zip_dirs(dir_names):
for dir in dir_names:
zip_process = zipfile.ZipFile(dir '.zip', "w", zipfile.ZIP_DEFLATED)
zip_process.write(parent_dir dir)
zip_process.close()
delete_dirs(dir_names)
# read the directory names from csv file
def read_csv():
with open(dir_csv, 'r') as f:
csv_reader = csv.reader(f, delimiter=',')
for row in csv_reader:
dir_names.append(row[0])
zip_dirs(dir_names)
read_csv()
CSV 輸入:
| ------|
| dir1 |
| dir2 |
| dir3 |
| dir4 |
目錄結構:
./dir-to-zip
/dir1
/dir2
/dir3
/dir4
uj5u.com熱心網友回復:
在python中使用shutil庫
#importing libraries
import pandas as pd
import os
import shutil
### *****below directories are simply examples; please set your own directories*****
folder_directory = 'D:\\Zip test' #setting directory where original folders are present
os.chdir(folder_directory) #changing current directory so that zip files are formed in the original directory
df = pd.read_csv(r'C:\Users\sahaa\Downloads\folder_names.csv') # reading the csv file with folder names
fol_nam = df['Folder Names'].tolist() # creating a list of the folders to be zipped which are present under the column 'Folder Names' in the CSV.
for i in fol_nam: # for loop
shutil.make_archive(i, 'zip', 'D:\\Zip test' '\\' i) # zipping each folder and keeping the nomenclature same
shutil.rmtree('D:\\Zip test' '\\' i) # deleting original folder after zipping
uj5u.com熱心網友回復:
試試這個
└───main_dir
├───dir01
├───dir02
└───dir03
……
import shutil
import os
def compress_directory(source_dir, output_filename, kind='zip'):
shutil.make_archive(output_filename, kind, source_dir)
main_dir = r'S:\repo\tools\main_dir'
# list sub folders
all_dirs = [os.path.join(*[main_dir, sub_dir]) for sub_dir in os.listdir(main_dir)]
# zip sub dirs
for sub_dir in all_dirs:
compress_directory(sub_dir, sub_dir)
# remove sub directory
shutil.rmtree(sub_dir)
# zip main dir
compress_directory(main_dir, main_dir)
# remove main directory
shutil.rmtree(main_dir)
...
└───main_dir.zip
├───dir01.zip
├───dir02.zip
└───dir03.zip
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467646.html
標籤:Python python-3.x python-2.7 CSV 压缩
