2013-02-21 3 views
5

Я проделал поиск, но большинство ответов посвящено чтению полного файла csv, и ни одна из них не похожа на проблему, с которой я сталкиваюсь.Python - как читать/разбирать csv как строку?

Я пытаюсь прочитать файл из сети, используя urllib2:

request = urllib2.Request('http://.../tv.txt') 
response = urllib2.urlopen(request) 
lines = response.readlines() 
for line in lines: 
    ... 

Формат «линия» выглядит как эти:

"ABC", "XYZ,MNO", "KLM" 
"ABC", "MN" 
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY" 

Как показано выше, эти строки не фактически CSV линий. Количество столбцов меняется.

Есть ли способ разделить каждую строку на список? В результате желание должно быть:

["ABC", "XYZ,MNO", "KLM"] 
["ABC", "MN"] 
["ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"] 

Я попытался с помощью line.split («»), но он не может разделить правильно, потому что там запятая внутри каждой пары двойных кавычек.

Пожалуйста, помогите мне, если вы знаете, как это сделать. Большое спасибо.

Приветствия,

PHP-Python-Java-MySQL-новичку.

ответ

8

использовать модуль csv, он делает то, что вам нужно.

yourstring= '"ABC", "XYZ,MNO", "KLM"\n"ABC", "MN"\n"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"' 

import csv 
import StringIO 

class MyDialect(csv.Dialect): 
    strict = True 
    skipinitialspace = True 
    quoting = csv.QUOTE_ALL 
    delimiter = ',' 
    quotechar = '"' 
    lineterminator = '\n' 


b=StringIO.StringIO(yourstring) 
r=csv.reader(b,MyDialect()) 

for i in r: 
    print len(i), ':',' @ '.join(i) 
+1

Как уже упоминалось в вопросе, я пробовал модуль csv. Если вы можете указать мне, какая функция в модуле csv, это было бы здорово. Я попытался для строки в csv.reader ([строка]): печать строки за это не http://docs.python.org/2/library/csv.html#examples, но никакого успеха – markbse

+0

Поняли достаточно сейчас? – LtWorf

+0

Спасибо. Во время ожидания я изменил исходный код из CSV в формат JSON, поэтому не тестировал ваш скрипт, но потом помечаю это как ответ. – markbse

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