从CSV导入文件名拼接文件夹路径时遇TypeError错误求助
解决CSV读取后路径拼接的TypeError问题
错误原因
你用csv.reader读取文件时,哪怕CSV里只有单列数据,每一行也会被解析成一个包含单个字符串的列表(比如['img1.jpg'])。所以file_names里的每个元素都是列表,不是字符串,直接和路径字符串拼接自然会报错TypeError: can only concatenate str (not "list") to str。
修正方案
方案1:修正CSV读取逻辑
读取时直接提取每行的第一个元素,把列表转成字符串列表:
import csv import shutil # 测试路径变量 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) # 打开CSV并提取文件名(转为字符串列表) with open(list_name, 'r') as csvfile: reader = csv.reader(csvfile, delimiter=',') # 提取每行的第一个元素,跳过空行并清理空白字符 file_names = [row[0].strip() for row in reader if row] print("I found these entries: ", file_names) # 拼接源路径 source_files = [source_folder + file for file in file_names] print(source_files) # 执行文件移动 for src, file in zip(source_files, file_names): dest = destination_folder + file shutil.move(src, dest) print(f"已移动文件: {file}")
方案2:不用CSV模块(更简单)
因为你的CSV本质是每行一个文件名,没有逗号分隔,直接按行读取更高效:
import shutil # 测试路径变量 source_folder = "/Users/user/Desktop/testSource/" destination_folder = "/Users/user/Desktop/testDest/" list_name = "/Users/user/Desktop/test.csv" print("Importing from file: ", list_name) # 按行读取文件名 with open(list_name, 'r') as f: # 去掉每行的换行符和空白,跳过空行 file_names = [line.strip() for line in f if line.strip()] print("I found these entries: ", file_names) # 移动文件 for file in file_names: src = source_folder + file dest = destination_folder + file shutil.move(src, dest) print(f"已移动文件: {file}")
补充说明
- 加
.strip()是为了去掉文件名前后的空格、换行符等空白字符,避免路径拼接出错 if row/if line.strip()是为了跳过CSV里的空行,避免处理无效路径
内容的提问来源于stack exchange,提问作者Skynet
相关产品推荐
相关产品推荐

