[英]Unrar the files with the name of the rar files
我有 4 個 rar(壓縮)文件的文件夾。
這是解壓縮它們的 python 代碼:
#!/usr/bin/python
import os, zipfile, pyunpack, sys
import tkinter as tk
from tkinter import filedialog
from tkinter.filedialog import askdirectory
root = tk.Tk()
root.withdraw()
basis_folder = askdirectory(title='Select Folder')
for root, dirs, files in os.walk(basis_folder):
for filename in files:
if filename.endswith(".rar") :
print('RAR:'+os.path.join(root,filename))
elif filename.endswith(".zip"):
print('ZIP:'+os.path.join(root,filename))
name = os.path.splitext(os.path.basename(filename))[0]
if filename.endswith(".rar") or filename.endswith(".zip"):
try:
arch = pyunpack.Archive(os.path.join(root,filename))
# os.mkdir(name)
arch.extractall(directory=root)
os.remove(os.path.join(root,filename))
except Exception as e:
print("ERROR: BAD ARCHIVE "+os.path.join(root,filename))
print(e)
try:
# os.path.join(root,filename)os.remove(filename)
pass
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occured
sys.exit()
os._exit(0)
在解壓縮過程之后,代碼會刪除 rar 文件並提取 rar 文件中的文件。 我希望將文件重命名為 rarfile1 中的 file1、rarfile1 中的 file2、rarfile1 中的 file3、rarfile2 中的 file1,依此類推...
這是我想要的結果:
/root/
- example1.rar
- example2.rar
實現這一目標的一種方法是執行這些步驟,但我相信肯定會有更好的方法:
/root/
example1/
file1.ext
file2.ext
example1.rar
/root/
example1/
file1.ext
file2.ext
/root/
/example1/
example1_file1.ext
example1_file2.ext
/root/
/example1/
example1_file1.ext
example1_file2.ext
/root/
example1_file1.ext
example1_file2.ext
以這種方式循環所有 Rars。 最終結果:
/root/ example1_file1.ext example1_file2.ext example2_file1.ext example2_file2.ext
我尚未運行並驗證代碼 - 但您的代碼將按照以下幾行進行修改:
for root, dirs, files in os.walk(basis_folder):
for filename in files:
if filename.endswith(".rar"):
print('RAR:' + os.path.join(root, filename))
elif filename.endswith(".zip"):
print('ZIP:' + os.path.join(root, filename))
name = os.path.splitext(os.path.basename(filename))[0]
if filename.endswith(".rar") or filename.endswith(".zip"):
try:
# root/yourfile.rar
curr_file_path = os.path.join(root, filename)
# root/yourfile/
new_file_dir = curr_file_path.split('.')[0]
# root/yourfile/yourfile.rar
new_file_path = os.path.join(new_file_dir, filename)
os.mkdir(new_file_dir)
os.replace(curr_file_path, new_file_path)
arch = pyunpack.Archive(new_file_path)
# extract files to root/yourfile
arch.extractall(directory=new_file_dir)
# Remove the Rar file
os.remove(new_file_path)
files_in_curr = [f for f in os.listdir(new_file_dir) if os.path.isfile(f)]
for file in files_in_curr:
new_name = os.path.join(new_file_dir, filename.split('.')[0] + '_' + file)
# Rename file from root/yourfile/file1.ext to root/yourfile/yourfile_file1.ext
os.rename(os.path.join(new_file_dir, file), new_name)
# move file from root/yourfile/yourfile_file1.ext to root/yourfile_file1.ext
os.replace(os.path.join(new_file_dir, new_name), os.path.join(root, new_name))
# Remove the temporary empty directory
os.rmdir(new_file_dir)
except Exception as e:
print("ERROR: BAD ARCHIVE " + os.path.join(root, filename))
print(e)
try:
# os.path.join(root,filename)os.remove(filename)
pass
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occured
sys.exit()
os._exit(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.