如何解决使用 rar 文件的名称解压文件
screenshot #1: rar files and names
这是解压它们的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)
unrar 处理后,代码删除 rar 文件并提取 rar 文件中的文件。我想将文件重命名为 rarfile1 中的 file1、rarfile1 中的 file2、rarfile1 中的 file3、rarfile2 中的 file1,依此类推...
这是我想要的结果:
[screenshot #2: unrar files and their new names]
解决方法
/root/
- example1.rar
- example2.rar
实现这一目标的一种方法是执行这些步骤,但我相信肯定会有更好的方法:
- 临时创建一个与您的 rar 文件同名的目录。 (目录 /root/example1/ 为 /root/example1.rar 文件
- 将 Rar 文件移动到临时目录 /root/example1/example1.rar
- 将example1.rar文件中的所有文件解压到example1目录下
/root/
example1/
file1.ext
file2.ext
example1.rar
- 删除rar文件
/root/
example1/
file1.ext
file2.ext
- 将example1目录下的所有文件重命名为example1_file1.ext
/root/
/example1/
example1_file1.ext
example1_file2.ext
- 将所有文件移动到 /root/
/root/
/example1/
example1_file1.ext
example1_file2.ext
- 删除 /example1/ 目录:
/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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。