gpt4 book ai didi

Python脚本递归打开目录中的.rar文件

转载 作者:行者123 更新时间:2023-12-04 18:45:45 25 4
gpt4 key购买 nike

我正在编写这个 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)

最佳答案

你的代码中有很多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)

    循环遍历文件(和目录,但我们忽略它们并通过将目录列表放入 _ 变量来实现它,这只是一种约定,但有效),并使用 subprocess 调用命令它在本地更改目录,所以 unrar提取存档所在目录中的文件。

    (在典型的 os.walk 循环中, root 是目录, f 是文件名(没有路径),这正是我们在正确的当前目录中运行子进程所需的,所以不需要 os.path.join 来计算完整路径)

    关于Python脚本递归打开目录中的.rar文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123649/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com