2017-02-01 1 views
0

Я пытаюсь использовать Python для разбора CSV-файла. У меня есть строка, как это:Python - String.split() с использованием разделителя ',', но есть цена в строке, также используя запятую в тысячах

"11/11/14","Buy","1,900","$10.40","-$19,760.00"

Я хочу, чтобы разобрать его в список, как этот

  • элемент 1 -> "11/11/14"
  • элемент 2 -> «Купить "
  • элемент 3 -> "1900"
  • элемент 4 -> "$ 10.40"
  • элемент 5 -> "- $ 19,760.00"

Однако, поскольку запятая разделитель числа тысяч, результат синтаксического анализа является

  • элемент 1 -> "11/11/14"
  • элемент 2 -> "Купить"
  • элемент 3 -> "1
  • элемент 4 -> 900"
  • элемент 5 -> "$ 10.40"
  • элемент 6 -> «- элемент $ 19
  • 7 -> 760 +0,00"

Вот мой код:

data = line.split(',') 

ответ

6

Возможно, вы захотите посмотреть на csv module в стандартной библиотеке python. Это автоматически позаботится о цитируемых строках в элементах CSV. Например:

with open('eggs.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='\"') 
    for row in spamreader: 
     print ', '.join(row) 

Это будет загружать в файл и прочитать его строка за строкой, а затем распечатать содержимое каждого элемента, разделенных запятой. Результат должен соответствовать тому, что вам нужно.

+0

я использую с открытым («eggs.csv», «г»), как csvfile: «г» insdead из «гб» с использованием «» радиоканал дает мне ошибку, как этот _csv.Error: Итератор должен возвращать строки, а не байты (вы открыли файл в текстовом режиме?) – yentn

+0

Я думаю, что это зависит от версии используемого вами питона (2 или 3). Фрагмент кода выше берется непосредственно из связанной документации для Python 2. –

0

использование,

data = line.strip('"').split('","') 

Там нет цены нет "Quote".

+0

Проблема, которую я вижу в этом, заключается в том, что вы не теряете первую и последнюю двойную кавычку в строке. Таким образом, первая и последняя записи в списке заканчиваются «11»/11/14'' и '' - $ 19 760,00 », соответственно. –

+0

О, да. Если бы это была простая строка, это сработало бы. – Prajwal

0

Сплит на "\",\"" вместо этого, если предположить, что в вашем разделителе нет пробелов, он будет работать, в противном случае используйте регулярное выражение для пробелов.

+0

Это не сработает. '' "\" 'не является действительной строкой Python. И' str.split() 'принимает строку, а не регулярное выражение в Python –

+0

Sure split не принимает регулярное выражение, но это не причина, почему вы не можете найти модуль, который будет разделяться на регулярное выражение. – awiebe

+0

Правильно, модуль 're' специально, но может также пойти только на модуль' csv', как ответили –

Смежные вопросы