获取 ValueError:在尝试将匹配的文件名从 csv 复制到另一个目录时,没有足够的值来解压(预期为 2,得到 1)
Posted
技术标签:
【中文标题】获取 ValueError:在尝试将匹配的文件名从 csv 复制到另一个目录时,没有足够的值来解压(预期为 2,得到 1)【英文标题】:Getting ValueError: not enough values to unpack (expected 2, got 1) while trying to copy matching filenames from csv to another directory 【发布时间】:2019-08-30 00:53:57 【问题描述】:您好,我正在尝试将 csv 中提到的文件从一个目录复制到另一个目录,但出现此错误。到目前为止的代码:
import os
import shutil
import csv
import sys
csv_file = "C:\\Users\\Lenovo\\.spyder-py3\\bha.csv"
existing_path_prefix = 'C:\\Users\\Lenovo\\.spyder-py3\\5KFILES\\'
new_path_prefix = 'C:\\Users\\Lenovo\\.spyder-py3\\err\\'
with open(csv_file, 'r') as f:
reader = csv.reader(f)
for (i, row) in enumerate(reader):
if i == 0:
print(i)
pass # Skip header row
else:
filename, filepath = row
new_filename = os.path.join(new_path_prefix, filename)
old_filename = os.path.join(filepath, filename)
shutil.copy(old_filename, new_filename)
打印出的行如下所示:
['05-18-18 Letter from BA - DMFLTR _20984_ IR.txt']
['05-18-18 Letter from CA NDA 20758s74 ACK Letter.txt']
['05-21-18 Letter from CBE 30-IR Gr.txt']
['05-24-18 Letter from FA 020872.txt']
['05-Mar-2018 - CBER Acknowledgement - 2198519.txt']
['05-Sept-2018 - CBER Approval - CCR 2229614 - Switch from AD.txt']
['05.10.2018 Cea Approval, var 15G.txt']
【问题讨论】:
问题是变量“row”不包含你认为它包含的内容。打印出来试试? (并告诉我们它是什么) 它包含每个文件名的单独列表 @BilzzM 你能和我们分享一下它的样子吗? 请检查更新后的代码 row 是一个列表,你用错了。它必须通过使用一些索引来访问。 【参考方案1】:根据您的 CSV,您的行基本上是 ['somestring']
并且要解压缩到一个元组,您需要一个包含至少两个元素的列表/元组。
基本上每一行应该是这样的:filename, filepath = ['some filename', 'some filepath']
你可以使用正则表达式:
import re
pattern = re.compile("([a-zA-Z 0-9 \-_.,]+) (\w+\.\w+)")
match = re.search(pattern, '05-18-18 Letter from BA - DMFLTR _20984_ IR.txt')
print(match.group(1))
print(match.group(2))
产生
05-18-18 Letter from BA - DMFLTR _20984_
IR.txt
所以基本上你需要做的就是将行传递给re.search(pattern, row)
,然后将文件名和文件路径作为:
filename = match.group(1)
filepath = match.group(2)
【讨论】:
@BlizzM 好吧,您的 CSV 格式一开始就不正确。因为您想将05-18-18 Letter from BA - DMFLTR _20984_ IR.txt
存储到两个变量中。你有更好的 CSV 吗?
另一种方法是使用正则表达式来捕获文件名和文件路径,但它实际上取决于所有行,如果所有行的文件名看起来像something.txt
问题出在 csv 上。非常感谢你们。
@BilzzM 查看我的答案,您可以如何使用re
来替代它。顺便说一句,如果对您有帮助,请标记答案。以上是关于获取 ValueError:在尝试将匹配的文件名从 csv 复制到另一个目录时,没有足够的值来解压(预期为 2,得到 1)的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配
获取ValueError:list.remove(x):x尝试从列表中删除值时不在列表中
Pandas 和 JSON ValueError:数组的长度必须相同
ValueError:使用字典时无法将不匹配长度分配给掩码数组