TypeError: принуждение к Unicode: нужна строка или буфер, список найден

пытаясь запустить этот скрипт синтаксического анализа данных. Он работает с манипуляциями с данными, что я пытаюсь сделать, это настроить это, чтобы я мог ввести несколько пользовательских CSV с помощью одной команды.

например

> python script.py One.csv Two.csv Three.csv 

Также, если у вас есть какие-либо советы о том, как автоматизировать именование выходного CSV, так что если input = test.csv , output = test1.csv

Получение

 TypeError: coercing to Unicode: need string or buffer, list found 

для линии

 for line in csv.reader(open(args.infile)): 

Мой код:

 import csv import pprint pp = pprint.PrettyPrinter(indent=4) res = [] import argparse parser = argparse.ArgumentParser() #parser.add_argument("infile", nargs="*", type=str) #args = parser.parse_args() parser.add_argument ("infile", metavar="CSV", nargs="+", type=str, help="data file") args = parser.parse_args() with open("out.csv","wb") as f: output = csv.writer(f) for line in csv.reader(open(args.infile)): for item in line[2:]: #to skip empty cells if not item.strip(): continue item = item.split(":") item[1] = item[1].rstrip("%") print([line[1]+item[0],item[1]]) res.append([line[1]+item[0],item[1]]) output.writerow([line[1]+item[0],item[1].rstrip("%")]) 

Я действительно не понимаю, что происходит с ошибкой, так что, если бы кто-то мог объяснить в мирянах?

Имейте в виду, что я новичок в программировании / python в целом и в основном участвую в одиночестве, поэтому, если возможно, вы могли бы объяснить, что происходит неправильно / как исправить, поэтому я не могу это сделать для будущей справки

  • N-й номер Фибоначчи для n размером до 10 ^ 19?
  • pandas.algos._return_false вызывает PicklingError с dill.dump_session на CentOS
  • Python - как создать список слов из заданных символов определенной длины
  • Как я могу контролировать, какой дистрибутив Python для пакета установить пакет, когда у меня есть Python 2, Python 3 и Anaconda на моем компьютере?
  • Существует ли рекомендованный формат для многолинейного импорта?
  • Сериализация двоичных данных в Python
  • Снова: установка Z3 + Python в Windows
  • Обновление до Django 1.7. Ошибка при получении: невозможно выполнить сериализацию: <storages.backends.s3boto.S3BotoStorage object
  • 2 Solutions collect form web for “TypeError: принуждение к Unicode: нужна строка или буфер, список найден”

    args.infile – это список имен файлов, а не одно имя файла. Переверните его:

     for filename in args.infile: base, ext = os.path.splitext(filename) with open("{}1{}".format(base, ext), "wb") as outf, open(filename, 'rb') as inf: output = csv.writer(outf) for line in csv.reader(inf): 

    Здесь я использовал os.path.splitext() для разделения расширений и базового имени файла, чтобы вы могли генерировать новое имя выходного файла, добавляя 1 к базе.

    Если вы укажете аргумент nargs для .add_argument , аргумент всегда будет возвращен как список.

    Предполагая, что вы хотите иметь дело со всеми указанными файлами, пропустите этот список:

     for filename in args.infile: for line in csv.reader(open(filename)): for item in line[2:]: #to skip empty cells [...] 

    Или, если вы действительно просто хотите указать один файл; просто избавьтесь от nargs="+" .

    Python - лучший язык программирования в мире.