Получение ValueError: недостаточно значений для распаковки (ожидается 2, получено 1) при попытке скопировать совпадающие имена файлов из csv в другой каталог - PullRequest
0 голосов
/ 08 апреля 2019

Привет. Я пытаюсь скопировать файлы, упомянутые в 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']

1 Ответ

1 голос
/ 08 апреля 2019

Согласно вашему 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)
...