我正在编写这个python脚本以递归遍历目录并使用ubuntu上的unrar实用程序打开所有.rar文件。由于某种原因,它将进入目录,列出一些内容,进入第一个子目录,打开一个.rar文件,然后打印父目录的所有其他内容而不进入它们。关于为什么会这样做的任何想法?我对python很新,所以就这么简单。
"""Recursively unrars a directory"""
import subprocess
import os
def runrar(directory):
os.chdir(directory)
dlist = subprocess.check_output(["ls"])
for line in dlist.splitlines():
print(line)
if isRar(line):
print("unrar e " + directory + '/' + line)
arg = directory + '/' + line
subprocess.call(['unrar', 'e', arg])
if os.path.isdir(line):
print 'here'
runrar(directory + '/' + line)
def isRar(line):
var = line[-4:]
if os.path.isdir(line):
return False
if(var == ".rar"):
return True
return False
directory = raw_input("Please enter the full directory: ")
print(directory)
runrar(directory)
答案 0 :(得分:1)
你的代码中有很多问题和笨拙的python使用,我可能无法列出它们。例子:
os.chdir
ls
的输出来读取目录(非常错误,在Windows上无法移植!)os.walk
可以避免我的建议:
for root,_,the_files in os.walk(path)
for f in the_files:
if f.lower().endswith(".rar"):
subprocess.call(['unrar', 'e', arg],cwd=root)
循环遍历文件(和dirs,但我们忽略它们,我们通过将dir列表放入_
变量,只是一个约定,但是一个有效的变量)来实现它,并使用{调用命令{1}}在本地更改目录,以便subprocess
提取存档所在目录中的文件。
(在那个典型的unrar
循环中,os.walk
是目录而root
是文件名(没有路径),正是我们需要在正确的当前目录中运行子进程,所以不需要f
计算完整路径