write work with reading imprimir how files dictreader python string arrays csv

work - write csv files in python



Cadena Python csv para matriz (10)

¿Alguien sabe de una biblioteca o función simple para analizar una cadena codificada en csv y convertirla en una matriz o diccionario?

No creo que quiera el módulo csv incorporado porque en todos los ejemplos que he visto se toman los caminos de archivo, no las cadenas.


Aquí hay una solución alternativa:

>>> import pyexcel as pe >>> text="""1,2,3 ... a,b,c ... d,e,f""" >>> s = pe.load_from_memory(''csv'', text) >>> s Sheet Name: csv +---+---+---+ | 1 | 2 | 3 | +---+---+---+ | a | b | c | +---+---+---+ | d | e | f | +---+---+---+ >>> s.to_array() [[u''1'', u''2'', u''3''], [u''a'', u''b'', u''c''], [u''d'', u''e'', u''f'']]

Aquí está la documentation


Como otros ya han señalado, Python incluye un módulo para leer y escribir archivos CSV. Funciona bastante bien siempre que los caracteres de entrada permanezcan dentro de los límites de ASCII. En caso de que desee procesar otras codificaciones, se necesita más trabajo.

La documentación de Python para el módulo csv implementa una extensión de csv.reader, que usa la misma interfaz pero puede manejar otras codificaciones y retorna cadenas de Unicode. Simplemente copie y pegue el código de la documentación. Después de eso, puede procesar un archivo CSV como este:

with open("some.csv", "rb") as csvFile: for row in UnicodeReader(csvFile, encoding="iso-8859-15"): print row


El documento oficial para csv.reader() https://docs.python.org/2/library/csv.html es muy útil, que dice:

los objetos de archivo y los objetos de lista son adecuados

import csv text = """1,2,3 a,b,c d,e,f""" lines = text.splitlines() reader = csv.reader(lines, delimiter='','') for row in reader: print(''/t''.join(row))


Panda es una biblioteca bastante poderosa e inteligente que lee CSV en Python

Un ejemplo simple aquí, tengo el archivo example.zip con cuatro archivos en él.

EXAMPLE.zip -- example1.csv -- example1.txt -- example2.csv -- example2.txt

from zipfile import ZipFile import pandas as pd filepath = ''EXAMPLE.zip'' file_prefix = filepath[:-4].lower() zipfile = ZipFile(filepath) target_file = ''''.join([file_prefix, ''/'', file_prefix, 1 , ''.csv'']) df = pd.read_csv(zipfile.open(target_file)) print(df.head()) # print first five row of csv print(df[COL_NAME]) # fetch the col_name data

Una vez que tenga datos, puede manipularlos para jugar con una lista u otros formatos.


Por la documentación:

Y aunque el módulo no admite directamente cadenas de análisis, puede hacerlo fácilmente:

import csv for row in csv.reader([''one,two,three'']): print row

Simplemente convierta su cadena en una sola lista de elementos.

Importar StringIO me parece un poco excesivo cuando este ejemplo está explícitamente en los documentos.


Simple: el módulo csv también funciona con listas:

>>> a=["1,2,3","4,5,6"] # or a = "1,2,3/n4,5,6".split(''/n'') >>> import csv >>> x = csv.reader(a) >>> list(x) [[''1'', ''2'', ''3''], [''4'', ''5'', ''6'']]


Use esto para tener un csv cargado en una lista

import csv csvfile = open(myfile, ''r'') reader = csv.reader(csvfile, delimiter=''/t'') my_list = list(reader) print my_list >>>[[''1st_line'', ''0''], [''2nd_line'', ''0'']]



Yo usaría StringIO :

try: # for Python 2.x from StringIO import StringIO except ImportError: # for Python 3.x from io import StringIO import csv scsv = """text,with,Polish,non-Latin,lettes 1,2,3,4,5,6 a,b,c,d,e,f gęś,zółty,wąż,idzie,wąską,dróżką, """ f = StringIO(scsv) reader = csv.reader(f, delimiter='','') for row in reader: print(''/t''.join(row))

versión simplier con split() en nuevas líneas:

reader = csv.reader(scsv.split(''/n''), delimiter='','') for row in reader: print(''/t''.join(row))

O simplemente puede split() esta cadena en líneas usando /n como separador, y luego split() cada línea en valores, pero de esta manera debe tener en cuenta las comillas, por lo que se prefiere usar el módulo csv .


>>> a = "1,2" >>> a ''1,2'' >>> b = a.split(",") >>> b [''1'', ''2'']

Para analizar un archivo CSV:

f = open(file.csv, "r") lines = f.read().split("/n") # "/r/n" if needed for line in lines: if line != "": # add other needed checks to skip titles cols = line.split(",") print cols