在.txt fi中将文件从一个文件夹复制到另一个文件夹

2024-04-24 14:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据.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语言的答案?在

谢谢


Tags: 文件intxt文件夹bashsourcefor文件名
3条回答

我认为您的Python代码的问题是使用os.walk()时,filename每次都是一个列表,在您的文件名中找不到这个列表。在

我建议用os.listdir()代替,因为这将以字符串形式返回文件名/文件夹名的列表-更容易与文件名进行比较。在

另一个注意事项-也许您想在源上而不是目标上执行os.listdir()(或os.walk())。当前,如果目标中已存在文件,则只将文件从源复制到目标。在

os.walk()将返回一个包含三个元素的元组:被检查的当前目录的名称、其中的文件夹列表以及其中的文件列表。你只对后者感兴趣。因此,您应该迭代:

for _, _, filenames in os.walk(destination):

正如JezMonkey指出的,os.listdir()更易于使用,因为它将列出请求目录中的文件和文件夹。但是,您将丢失os.walk()启用的递归搜索。如果您的所有文件都在同一个文件夹中,而不是隐藏在某些文件夹中,您宁愿使用os.listdir()。在

我在代码中看到的第二个问题是,当我认为您想要复制os.path.join(source, filename)时,您复制{}。在

你能不能把Python脚本的错误公布出来,这样我们才能更好地帮助你。在

更新

实际上不需要列出源文件夹中的所有文件。使用os.path.exists可以检查文件是否存在,如果存在,则进行复制。在

^{pr2}$

感谢@PySaad和@Guillaume的贡献,尽管我的脚本正在运行:我添加了:

             if os.path.exists(copy_to):
            shutil.rmtree(copy_to)
            shutil.copytree(file_to_copy, copy_to)

对剧本和它的魅力:)

非常感谢你的帮助!在

相关问题 更多 >