我正在try 编写一个程序,将接受一个CSV文件包含1列的文件名,附加源,然后目标文件路径,然后移动这些选定的文件到目标文件夹. CSV示例:

img1.jpg
img2.jpg
img3.jpg
etc...

我try 了这个网站上找到的几种不同版本的解决方案,但它们对我来说都有相同的错误:

"TypeError: can only concatenate str (not "list") to str

以下是我的最新代码:

import csv
import shutil

#  Test path variables
source_folder = "/Users/user/Desktop/testSource/"
destination_folder = "/Users/user/Desktop/testDest/"
list_path = "/Users/user/Desktop/"
list_file = "test.csv"
list_name = list_path + list_file
print("Importing from file: ",list_name)

#  Opens the.csv and saves result to a list
with (open(list_name, 'r') as csvfile):
    reader = csv.reader(csvfile, delimiter=',')
    file_names = list(reader)
    print("I found these entries: ",file_names)
    source_files = [source_folder + i for i in file_names]
    print(source_files)

这就是错误发生的地方,尽管进行了多次迭代.我不能联接列表中的元素,也不能将列表拆分成离散的元素.Python似乎认为FILE_NAMES既是列表,也不是列表.如果我可以让源附加部分工作,我可以复制到目的地,并构建我的完整路径列表以迭代通过.

任何帮助都将不胜感激,我不知道我错过了什么.

已try 将源/目标文件路径联接到列表中的每个元素,希望将完整路径名传递给Shutil.

我不断地得到can only concatenate str (not "list") to str个错误.

推荐答案

即使您的CSV只有一列,csv.ader也会将"行"视为字符串列表.

如果打印file_names变量,您将看到多行(字符串列表列表):

[
    ['img1.jpg'],
    ['img2.jpg'],
    ['img3.jpg'],
]

您的列表理解[... for i in file_names]只在行级迭代,i仍然是一个字符串列表,因此您实际上是在try 连接一个字符串和一个(字符串)列表.如图所示,看起来像是:

 source_folder + ['img1.jpg']

所以,Python给了我们一个合理的错误,

Importing from file:  ./input.csv
I found these entries:  [['img1.jpg'], ['img2.jpg'], ['img3.jpg']]
Traceback (most recent call last):
  File "/Users/zyoung/develop/StackOverflow/main.py", line 17, in <module>
    source_files = [source_folder + i for i in file_names]
                    ~~~~~~~~~~~~~~^~~
TypeError: can only concatenate str (not "list") to str

(我们还可以在打印输出"我找到这些条目"中看到,我们正在处理一个字符串列表列表)

对于您的简单情况,只需索引到行以获得第一个(也是唯一的)字段就可以解决问题:

[source_folder + i[0] for i in file_names]

Python-3.x相关问答推荐

PythonPandas -通过知道位置(Loc)而不是索引来删除行

pandas查找另一列中是否存在ID

将数据帧扩展为矩阵索引

Heroku 中的未知错误代码缺少一个或多个参数

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

如何将搜索结果中的所有值保存在另一个列表中?

Python 3 - 给定未知数量的类别动态地将字典嵌套到列表中

为什么Pandas会在 NaN 上合并?

Generic[T] 基类 - 如何从实例中获取 T 的类型?

使用 distutils 分发预编译的 python 扩展模块

PySpark python 问题:Py4JJavaError: An error occurred while calling o48.showString

判断对 python 3 支持的要求

python - 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT

ImportError:无法在 PyQt5 中导入名称QStringList

如何制作函数Collection

Pruning in Keras

Python 的 unittest 和 unittest2 模块有什么区别?

如何在 Pandas 中的超 Big Data 框上创建数据透视表

如何将发音相似的词放在一起

如何使用 Celery 和 Django 将任务路由到不同的队列