Python初学者:使用sys.argv处理脚本调用中的文件路径[

时间:2016-08-21 18:32:44

标签: python-3.x escaping

找到一种方法来运行一堆子文件夹来查找并将特殊文件类型移动到另一个目标,我想到了使用python。

我正在开发运行Python 3的OSX。

我想按如下方式运行我的脚本:

$python3 find_files.py <search_path> <destination_path> <file_extension>

e.g:

$python3 find_files.py /Volumes/Macintosh\ HD/Users/xyz/Downloads/ /Volumes/Data/Files/ zip

不幸的是,我完全不确定如何处理文件路径中的空格。

这是我的剧本:

import os, sys, shutil

def find_files(path, destination, extension):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(extension):
                shutil.move(repr(path)+file, repr(destination)+file)

find_files(sys.argv[1], sys.argv[2], sys.argv[3])

由于文件路径问题,文件的移动无法正常工作。

FileNotFoundError: [Errno 2] No such file or directory:

我已经尝试过像

这样的事情了
form_path = path.replace(' ', '\')

sys.argv[1] = sys.argv[1].replace(' ', '\\')

以逃避空格,但我总是得到FileNotFound错误。

有人可以帮忙吗?

提前致谢。

此致 Gardinero

1 个答案:

答案 0 :(得分:0)

我认为你的问题不在于空间逃避,而在于你的计划;你没有将root附加到你想要移动的文件(你不能只是追加路径,因为你走的是子目录)。试试这个:

import os, sys, shutil

def find_files(path, destination, extension):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(extension):
                shutil.move(root + '/' + file, destination + '/' + file)


find_files(sys.argv[1], sys.argv[2], sys.argv[3])