Python 尝试将多个文件复制并粘贴到新目录中

Python 尝试将多个文件复制并粘贴到新目录中,python,Python,我的excel工作表有一个文件名列表,如下所示。 ZINK.7482347382.pdbqt文件是什么。group/group50 stuff是它所在的子目录 我想在Python中创建一个循环,搜索每个文件,并将其复制到一个新文件夹中,这样我就不必自己查找和复制文件。(为了便于分析,我想复制大约500个文件。) 这是我当前的代码 import numpy as np import csv with open("Gabe_run1results.txt", "r&

我的excel工作表有一个文件名列表,如下所示。

ZINK.7482347382.pdbqt文件是什么。group/group50 stuff是它所在的子目录

我想在Python中创建一个循环,搜索每个文件,并将其复制到一个新文件夹中,这样我就不必自己查找和复制文件。(为了便于分析,我想复制大约500个文件。)

这是我当前的代码

import numpy as np
import csv

with open("Gabe_run1results.txt", "r") as my_file:
reader = csv.reader(my_file) # delimiter='\t')
my_list = list(reader)


myarray = np.asarray(my_list)
这段代码将所有信息放入一个列表中,列表中列出了图片中的名称,然后将其存储在一个数组中,这样我就可以使用shutil.copy2执行循环来查找和复制文件

Source是父文件,str(myarray[i])是特定的子目录

l = 10 

import shutil

#shutil.copy2(source,destination)

for i in range (0,l):
    myarray[i]
    source = "/Users/Gabriel/Desktop/" + str(myarray[i])
    destination = "/Users/Gabriel/Desktop/blah"
    shutil.copy2(source,destination)
但是,由于文件名在数组中存储为字符串,因此返回以下错误

错误:源/Users/Gabriel/Desktop/[“group/group50/ZINC7483743.pdbqt”]不存在

因此,基本上我需要找到一种方法重新开始,或者让循环以group/group50/ZINC7483743.pdbqt而不是[“ZINC7483743.pdbqt”]的形式读取数组


感谢您的帮助。

您正在打开并阅读csv。结果是行列表,即列列表

然后你把它复制到一个numpy数组中——我不知道你为什么要这样做,但它不会改变形状:你能从中得到的唯一东西是一个2D数组(或者一个1D数组,它的值是列表,这也不是更好)

然后,尝试使用
str
将这些行中的每一行转换为文件名。但所做的只是得到numpy数组的1D切片的字符串表示。所以你的路径看起来像胡说八道,里面有括号和引号。该错误显示您尝试使用的路径名:

Error: The source /Users/Gabriel/Desktop/["group/group50/ZINC7483743.pdbqt"] does not exist.
您的桌面上肯定没有名为
[“group/group50/ZINC7483743.pdbqt”]
的文件。这个问题与需要过滤掉group50内容并在以后重新添加它无关。您只需要使用一个路径而不是路径列表

由于路径似乎总是CSV中的第一列(您只给了我们一个示例,因此我希望有一个示例具有代表性),因此您可以通过执行以下操作来修复它:

my_list = [row[0] for row in csv...]
与此相反:

my_list = list(csv...)
然而,有一个更简单的解决方案。只有一列的CSV并不是真正的CSV,它只是一个简单的行列表。那你为什么还要使用CSV模块呢?只需打开文件,然后执行
my_list=list(f)
。(每一行都是一个文件名加上一个换行符,因此您需要
rstrip()
it来获取文件名,但这比在不是CSV文件时将其解析为CSV文件要简单得多。)

既然如此,为什么需要numpy数组,甚至列表?为什么不直接迭代文件中的行呢

像这样:

with open(‘file_with_one_relative_path_per_line) as f:
    for relpath in f:
        source = "/Users/Gabriel/Desktop/" + relpath.rstrip()
        destination = "/Users/Gabriel/Desktop/blah"
        shutil.copy2(source,destination)

您的代码没有向
源添加
/
。这在CSV条目中吗?或者这不是您的实际代码?或者错误实际上是告诉您
directorypam
丢失,而不是
directory/spam
?此外,目录
directory
是否确实存在?路径名
中的其他子目录如何?最后,你能给我们提供实际的异常(带回溯),而不仅仅是模糊的描述吗?@abarnert,我做了更改,希望这能澄清错误和问题。好的,既然问题中有足够的信息,问题就显而易见了。我会写一个答案。我想把它放入数组会使它变得可移植,但我不知道你可以通过文件本身迭代目录。我只是尝试了你发送的代码,现在它给我这个错误,没有这样的文件或目录:'/Users/Gabriel/Desktop/group559/ZINC67219131.pdbqt\n'。/n是什么意思?@BGP python-Oops,文件名的末尾有一个新行。使用
relpath.rstrip()
而不仅仅是
relpath
。@BGP python列表和数组一样是iterable的范例,事实上,它们是iterable的范例。你能做的任何事情都必须是可编辑的;
list(It)
所做的是(稍微优化的)
中的东西:self.append(thing)