2016-03-06 3 views
5

Есть ли способ, которым я могу разобрать одну строку с разделителями-запятыми без использования каких-либо фантазий, таких как csv.reader (..)? Я могу использовать функцию split(','), но это не работает, когда допустимое значение столбца содержит запятую. В библиотеке csv есть читатели для разбора CSV-файлов, которые правильно обрабатывают вышеупомянутый специальный случай, но я не могу использовать их, потому что мне нужно разобрать только одну строку. Однако, если Python CSV позволяет разобрать одну строку, то это новость для меня.Разбор одной строки CSV?

ответ

11

Присмотритесь к документации для csv модуля, который говорит:

reader(...) 
    csv_reader = reader(iterable [, dialect='excel'] 
          [optional keyword args]) 
     for row in csv_reader: 
      process(row) 

    The "iterable" argument can be any object that returns a line 
    of input for each iteration, such as a file object or a list. The 
    optional "dialect" parameter is discussed below. The function 
    also accepts optional keyword arguments which override settings 
    provided by the dialect. 

Так что, если вам имеют строку:

>>> s = '"this is", "a test", "of the csv", "parser"' 

И вы хотите «объект, который возвращает строку вход для каждой итерации », вы можете просто обернуть строку в списке:

>>> r = csv.reader([s]) 
>>> list(r) 
[['this is', 'a test', 'of the csv parser']] 

И это, как вы разобрать строку с csv модулем.

+0

Думаю, было бы более элегантно использовать 'iter (s)' как для общего итератора вместо '[s]' (указав список). Но у меня есть мой +1 – RafaelC

+0

. Вероятно, это не сработает, если в строке указаны строки строк внутри значений; Ответ @ alecxe имеет смысл – swooby

9

Вы все еще можете разобрать одну строку с помощью csv. Используйте StringIO написать строку buffer (также известный как файлов памяти):

import csv 
from StringIO import StringIO 

s = "your string" 
buff = StringIO(s) 

reader = csv.reader(buff) 
for line in reader: 
    print(line) 
+0

Для Python 3 используйте 'from io import StringIO' см. [Здесь] (https://docs.python.org/3/library/io.html#text-io) –

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