【问题标题】:Search for multiple files by name and copy to a new folder按名称搜索多个文件并复制到新文件夹
【发布时间】:2014-08-30 14:20:32
【问题描述】:

我一直在尝试编写一些 python 代码,以便从 .txt 文件中获取每一行,并在文件夹及其子文件夹中搜索具有该名称的文件。在此之后,我想将该文件复制到预设的目标文件夹中。

问题是当我测试这段代码时,我可以读取 .txt 中的所有文件,并且可以显示目录及其子目录中的所有文件。当我必须将从 .txt 中读取的文件名(如我所说的逐行)与目录文件夹中的所有文件名进行比较,然后将文件复制到那里时,问题就出现了。

任何想法我做错了什么?

import os, shutil

def main():

dst = '/Users/jorjis/Desktop/new'

f = open('/Users/jorjis/Desktop/articles.txt', 'rb')
lines = [line[:-1] for line in f]
for files in os.walk("/Users/jorjis/Desktop/folder/"):
    for line in lines:
        if line == files:
            shutil.copy('/dir/file.ext', '/new/dir')

【问题讨论】:

  • .txt 中的行是包含整个路径还是只是some_name.txt
  • .txt 文件看起来像这样(每个名称都在其他名称之下...我的意思是它们不在同一行): 14060873.json 10961282.json 11038869.json ... 所以它只包含文件的名称,而不是它的路径!

标签: python input copy directory


【解决方案1】:

如果我不得不猜测,我会说.txt 中的文件包含整个路径。您需要向os.walk 添加更多内容才能完全匹配。

for root, _, files in os.walk("/Users/jorjis/Desktop/folder/"):
    for f in files:
        new_path = f + root
        if new_path in lines:
            shutil.copy(new_path, `/some_new_dir')

再说一次,我不确定.txt 文件是什么样子,所以可能是您原来的方式有效。如果是这种情况,请仔细查看lines = ... 行。

【讨论】:

  • .txt 文件看起来像这样(每个名称都在其他名称之下...我的意思是它们不在同一行): 14060873.json 10961282.json 11038869.json ... I不能只提供文件必须复制到的文件夹的另一个路径吗?我的意思是这样“计算”路径更好吗?谢谢朋友!
【解决方案2】:

您正在将文本文件中的文件名与包含三个元素的元组进行比较:当前访问的文件夹的根路径、该路径中所有子目录名称的列表以及该路径中所有文件名的列表。将字符串与元组进行比较永远不会为真。您必须将每个文件名与要复制的文件名集进行比较。数据类型set在这里就派上用场了。

with 语句一起打开文件可确保在控制流离开with 块时将其关闭。

代码可能如下所示:

import os
import shutil

def main():
    destination = '/Users/jorjis/Desktop/new'

    with open('/Users/jorjis/Desktop/articles.txt', 'r') as lines:
        filenames_to_copy = set(line.rstrip() for line in lines)

    for root, _, filenames in os.walk('/Users/jorjis/Desktop/folder/'):
        for filename in filenames:
            if filename in filenames_to_copy:
                shutil.copy(os.path.join(root, filename), destination)

【讨论】:

  • 谢谢伙计!我唯一的问题是使用 shutil.copy() 但我会仔细检查文档。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2014-08-06
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多