Uso de Python para leer archivos CSV no estrictos

Mi archivo CSV es aquí

Aquí está mi formato de datos:

1763212493,zhangniuzhang,masculino,,sí,(esta es una coma china, no en inglés)Sí,hubei wuhan,1763212493,69,86,316,,,tp2.sinaimg.cn/1763212493/50/5613831962/1,0," gratis,casa,viaje,80","1863415082,1752861352"

y mi código:

import csv

with open("test.csv", "r") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print row

Es muy simple, pero obtuve lo siguiente:

{'mn': '316', 'ci': '', 'sx': 'male', 'ei': '', 'ad': 'hubei;"wuhan', 'vi': '', 'fui;': 'house', 'de': 'yes\xef\xbc\x8ci do', 'iu': 'tp2.sinaimg.cn/1763212493/50/5613831962/1', 'an': '69', 'un': '1763212493', 'iv': '0', 'sn': 'zhangniuzhang', None: ['trip', '80""', '1863415082', '1752861352"""'], 'tg': 'free', '_id': '1763212493', 'fn': '86'}
{'mn': '1104', 'ci': '', 'sx': 'femail', 'ei': '', 'ad': 'jilin;"changchun', 'vi': '', 'fui;': 'art', 'de': '', 'iu': 'tp2.sinaimg.cn/1854635021/50/1289455604/0', 'an': '71', 'un': '1854635021', 'iv': '0', 'sn': 'ladywang', None: ['reading', 'music""', '1949520584', '1288127940', '1193111400"""'], 'tg': 'life', '_id': '1854635021', 'fn': '258'}

Para el primer registro, ad iguales hubei;"wuhan, pero en el archivo original no hay "; está en una columna diferente.

Muchos campos tienen un valor incorrecto. Para el primer registro:

1763212493,zhangniuzhang,male,,yes,i do,hubei wuhan,1763212493,69,86,316,,,tp2.sinaimg.cn/1763212493/50/5613831962/1,0,"free,house,trip,80","1863415082,1752861352"

La salida debe ser:

{'mn': '316', 'ci': '', 'sx': 'male', 'ei': '', 'ad': 'hubei wuhan', 'vi': '', 'fui': '1863415082,1752861352', 'de': 'yes\xef\xbc\x8ci do', 'iu': 'tp2.sinaimg.cn/1763212493/50/5613831962/1', 'an': '69', 'un': '1763212493', 'iv': '0', 'sn': 'zhangniuzhang', 'tg': 'free,house,trip,80', '_id': '1763212493', 'fn': '86'}   

Pero la salida es desordenada, no el orden correcto ni los valores correctos.

¿Alguna sugerencia?

preguntado el 12 de junio de 12 a las 13:06

1 Respuestas

Puedes probar como .

filepath es la ruta de su test.csv

fdata = open(filepath) 
fread = [ l for l in fdata.readlines() if l.strip() ]

ahora puedes iterar fread

Respondido el 12 de junio de 12 a las 13:06

con open("test.csv", "r") como f: lector = [l para l en f.readlines() ] para fila en lector: imprimir fila - kua fu

the result is same:1763212493,zhangniuzhang,male,,yes,i do,hubei;"wuhan,1763212493,69,86,316,,,tp2.sinaimg.cn/1763212493/50/5613831962/1,0,""free,house,trip,80"",""1863415082,1752861352""" 1854635021,ladywang,femail,,,jilin;"changchun,1854635021,71,258,1104,,,tp2.sinaimg.cn/1854635021/50/1289455604/0,0,""life,art,reading,music"",""1949520584,1288127940,1193111400""" - kua fu

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.