使用python将文件夹从文件夹列表移动到其他文件夹列表

时间:2017-05-05 13:46:35

标签: python python-2.7

你好我想将多个文件夹从一些文件夹列表移动或复制到其他文件夹列表我使用globshutil库来完成这项工作。

首先我创建一个文件夹列表:

import glob

#paths from source folder
sourcepath='C:/my/store/path/*'
paths = glob.glob(sourcepath)
my_file='10'
selected_path = filter(lambda x: my_file in x, paths)
#paths from destination folder
destpath='C:/my/store/path/*'
paths2 = glob.glob(destpath)
my_file1='20'
selected_path1 = filter(lambda x: my_file1 in x, paths2)

现在我有两个路径列表(selected_pa​​th,selected_pa​​th1)

现在我想将第一个列表(selected_path)中的文件夹或文件复制到第二个列表(selected_path1

最后我尝试使用此代码移动文件夹但没有成功:

import shutil
for I,j in zip(selected_path,selected_path1)
     shutil.move(i, j)

但是无法工作,任何想法如何使我的代码工作?

1 个答案:

答案 0 :(得分:1)

首先,显然您使用lambda没有用,glob函数可以执行此过滤。这就是glob真正做的事情,所以你基本上乱用你的代码进行更多不必要的函数调用,这在性能方面非常昂贵。

看看这个与你的相同的例子:

import glob

# Find all .py files
sourcepath= 'C:/my/store/path/*.py'
paths = glob.glob(sourcepath)

# Find files that end with 'codes'
destpath= 'C:/my/store/path/*codes'
paths2 = glob.glob(destpath)

其次,第二个glob函数调用可能会或可能返回目录列表以将目录/文件移动到。这使得您的代码依赖于C:/ my / store / path contains. That is, you must guarantee that 'C:/my/store/path必须仅包含目录而不包含文件,因此glob将仅返回要在shutil.move中使用的目录。如果用户以后将文件而不是文件夹添加到C:/ my / store / path,那恰好以“代码”结尾,并且他们没有指定任何扩展名(例如,codes.txt,codes.py ...)那么您将在glob的{​​{1}}返回列表中找到此文件。当然,保证目录只包含子目录是有问题的,不是一个好主意,根本不是。您可以通过paths2

测试目录

请注意,您在os.path.isdir的帮助下使用lambda过滤掉第一次调用filter时不包含10的字符串,你可以用filter本身实现的东西:

glob

现在,在glob.glob('C:/my/store/path/*10*') 函数的返回列表中将收集名称中包含10的C:/ my / store / path的任何文件或子目录。

第三,glob截断到其参数列表中最短的可迭代。换句话说,如果您想将zip中的每个路径移至paths中的每个路径,则需要paths2 len(paths) == len(paths2)中的每个文件或目录都有paths移到directory

第四,您错过了paths2循环的分号以及for使用shutil.move代替i的号码。 Python是一种区分大小写的语言,I大写与I小写字母不完全相同:

i

更正后的代码:

import shutil
for I,j in zip(selected_path,selected_path1)            # missing :
     shutil.move(i, j)                                  # i not I 

据推测,import shutil for I,j in zip(selected_path,selected_path1) # missing : shutil.move(I, j) # i not I 只包含C:/ my / store / path目录的子目录,这是一种更好的编写代码的方法,但绝对不是最好的:

paths2

*我上面提到的一些以前的问题仍适用于此代码。

现在你完成了阅读这个答案的漫长马拉松,你想做些什么来改进你的代码?如果你仍然发现一些含糊不清的东西,我会很乐意提供帮助。

祝你好运:)