我想根据.txt
文件中的匹配文件名将文件从一个大文件夹复制到另一个文件夹。在
我的list.txt
文件包含文件名:
S001
S002
S003
另一个大文件夹包含许多文件,例如S001, S002, S003, S004, S005
。在
我只想从这个大文件夹复制与我的list.txt
文件中的文件名相匹配的文件。在
我试过Bash,Python-不起作用。在
^{pr2}$也没用。在
我在Python中的逻辑不起作用:
import os
import shutil
def main():
destination = "DestinationFolder/copy"
source = "SourceFolder/MyBigData"
with open(source, "r") as lines:
filenames_to_copy = set(line.rstrip() for line in lines)
for filenames in os.walk(destination):
for filename in filenames:
if filename in filenames_to_copy:
shutil.copy(source, destination)
有没有Bash、Python或R语言的答案?在
谢谢
我认为您的Python代码的问题是使用
os.walk()
时,filename
每次都是一个列表,在您的文件名中找不到这个列表。在我建议用
os.listdir()
代替,因为这将以字符串形式返回文件名/文件夹名的列表-更容易与文件名进行比较。在另一个注意事项-也许您想在源上而不是目标上执行
os.listdir()
(或os.walk()
)。当前,如果目标中已存在文件,则只将文件从源复制到目标。在os.walk()
将返回一个包含三个元素的元组:被检查的当前目录的名称、其中的文件夹列表以及其中的文件列表。你只对后者感兴趣。因此,您应该迭代:正如JezMonkey指出的,
os.listdir()
更易于使用,因为它将列出请求目录中的文件和文件夹。但是,您将丢失os.walk()
启用的递归搜索。如果您的所有文件都在同一个文件夹中,而不是隐藏在某些文件夹中,您宁愿使用os.listdir()
。在我在代码中看到的第二个问题是,当我认为您想要复制}。在
os.path.join(source, filename)
时,您复制{你能不能把Python脚本的错误公布出来,这样我们才能更好地帮助你。在
更新
实际上不需要列出源文件夹中的所有文件。使用
^{pr2}$os.path.exists
可以检查文件是否存在,如果存在,则进行复制。在感谢@PySaad和@Guillaume的贡献,尽管我的脚本正在运行:我添加了:
对剧本和它的魅力:)
非常感谢你的帮助!在
相关问题 更多 >
编程相关推荐