获取ValueError:尝试将匹配的文件名从csv复制到另一个目录时,没有足够的值来解压缩(预期2,得到1)

问题描述 投票:0回答:1

您好我试图将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']
python file csv file-handling valueerror
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.