Python 按名称搜索多个文件并复制到新文件夹
我一直在尝试编写一些python代码,以便从.txt文件中获取每一行,并在文件夹及其子文件夹中搜索具有该名称的文件。在此之后,我想将该文件复制到预设的目标文件夹中 问题是,当我测试这段代码时,我可以读取.txt中的所有文件,并且可以显示目录及其子目录中的所有文件。当我必须将从.txt读取的文件名(如我所说的逐行)与目录文件夹中的所有文件名进行比较,然后将文件复制到那里时,问题就出现了 知道我做错了什么吗Python 按名称搜索多个文件并复制到新文件夹,python,input,copy,directory,Python,Input,Copy,Directory,我一直在尝试编写一些python代码,以便从.txt文件中获取每一行,并在文件夹及其子文件夹中搜索具有该名称的文件。在此之后,我想将该文件复制到预设的目标文件夹中 问题是,当我测试这段代码时,我可以读取.txt中的所有文件,并且可以显示目录及其子目录中的所有文件。当我必须将从.txt读取的文件名(如我所说的逐行)与目录文件夹中的所有文件名进行比较,然后将文件复制到那里时,问题就出现了 知道我做错了什么吗 import os, shutil def main(): dst = '/Users/
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
中的文件包含整个路径。您需要在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
文件是什么样子的,所以可能是您原来的工作方式。如果是这种情况,请仔细查看行=…
行 将文本文件中的文件名与包含三个元素的元组进行比较:当前访问文件夹的根路径、该路径中所有子目录名的列表以及该路径中所有文件名的列表。将字符串与元组进行比较永远不会是真的。您必须将每个文件名与要复制的文件名集进行比较。数据类型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)
.txt
中的行是否包含整个路径,或者它们只是某个名称.txt
?该.txt文件如下所示(其中每个名称位于其他名称下…它们不在同一行中):14060873.json 10961282.json 11038869.json。。。所以它只包含文件名,而不是路径!txt文件如下所示(其中每个名称位于其他名称下…我的意思是它们不在同一行中):14060873.json 10961282.json 11038869.json。。。我不能只提供文件必须复制到的文件夹的另一个路径?我的意思是这样“计算”路径更好吗?谢谢你,伙计!谢谢你,伙计!我唯一的问题是使用shutil.copy(),但我会仔细查看文档。干杯