2014-09-13 3 views
0

У меня есть файл csv, который использует þ в качестве цитаты, и символ абзаца как значение, разделенное запятыми.read_csv using необычные разделители

Использование подкласса csv.Dialect не работает. Pandas не интерпретирует значение þ как строку.

Любые идеи?

# This works when the delimiters are more standard (; ") 
# But really trying to make it work with the ASCII chars commented out below 

import csv 

f = open('./data/Test_Quote_SemiColon.dat') 

class my_dialect(csv.Dialect): 
    lineterminator = '\n' 
    delimiter = ';' # ASCII: 020 
    quotechar = '"' # ASCII: 254 

reader = csv.reader(f, dialect=my_dialect, quoting=1) 

for line in reader: 
    print line 

Вот (цитата и запятой) данные:

"BEGID"; "ENDID", "Имя", "В", "С", "CC", "BCC" «ABC_001», «ABC_004», «Smith, John», «Doe, John», «Roe, Jane», «"; "" "ABC_005", "ABC_007", "Smith, John", "Doe, John ";"

+1

Можете ли вы дать небольшой пример вам данных (в прошлом часть вашего файла CSV, или что-то, что выглядит, как он и повторяет эту проблему), а также код, который вы использовали для чтения с помощью панд. – joris

+0

Какая кодировка используется на csv? Вы пробовали изменить кодировку? Знаете ли вы коды ASCII этих символов, поэтому вы можете сделать sep = 'something' и quote = 'something'? – Inox

ответ

0

Я нашел и то, и другое, и то, и другое. буквально и chr(254) работал, чтобы разобрать это. Кажется ли это правильным?

>>> import StringIO 
>>> txt = '''þBEGIDþþENDIDþþNameþþToþþFromþþCCþþBCCþ þABC_001þþaBC_004þþSmith, JohnþþDoe, JohnþRoe, Janeþþþþþ þABC_005þþaBC_007þþSmith, JohnþþDoe, Johnþþþþþþ þABC_008þþaBC_012þþDoe, JohnþþDoe, JohnþSmith, Johnþþþþþ''' 
>>> reader = csv.reader(StringIO.StringIO(txt), delimiter=',', quotechar=chr(254)) 
>>> for line in reader: 
...  for entry in line: 
...   print unicode(entry, 'utf8') 
... 
þBEGIDþþENDIDþþNameþþToþþFromþþCCþþBCCþ þABC_001þþaBC_004þþSmith 
JohnþþDoe 
JohnþRoe 
Janeþþþþþ þABC_005þþaBC_007þþSmith 
JohnþþDoe 
Johnþþþþþþ þABC_008þþaBC_012þþDoe 
JohnþþDoe 
JohnþSmith 
Johnþþþþþ 

txt отголоски, как:

>>> txt 
'\xc3\xbeBEGID\xc3\xbe\xc3\xbeENDID\xc3\xbe\xc3\xbeName\xc3\xbe\xc3\xbeTo\xc3\xbe\xc3\xbeFrom\xc3\xbe\xc3\xbeCC\xc3\xbe\xc3\xbeBCC\xc3\xbe \xc3\xbeABC_001\xc3\xbe\xc3\xbeaBC_004\xc3\xbe\xc3\xbeSmith, John\xc3\xbe\xc3\xbeDoe, John\xc3\xbeRoe, Jane\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe \xc3\xbeABC_005\xc3\xbe\xc3\xbeaBC_007\xc3\xbe\xc3\xbeSmith, John\xc3\xbe\xc3\xbeDoe, John\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe \xc3\xbeABC_008\xc3\xbe\xc3\xbeaBC_012\xc3\xbe\xc3\xbeDoe, John\xc3\xbe\xc3\xbeDoe, John\xc3\xbeSmith, John\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe\xc3\xbe' 
+0

Просто FYI, используя iPython Notebook 2.2, Python 2.7.6 Я вижу ошибку для StringIO. Что такое импорт? – CAtoDC

+0

Закрыть - но не совсем. Я думаю, что для этого требуется значение определителя. Он должен выглядеть следующим образом (без кавычек): [ 'BEGID', 'ENDID', 'Name', 'To', 'С', 'CC', 'BCC'] [ 'ABC_001' , «ABC_004», «Smith, John», «Doe, John», «Roe, Jane», «», «] ['ABC_005', 'ABC_007', 'Smith, John', 'Doe, John' , '', '', ''] ['ABC_008', 'ABC_012', 'Doe, John', 'Doe, John', 'Smith, John', '', ''] – CAtoDC

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