how - Python importar csv a la lista
python csv reading (9)
Tengo un archivo CSV con aproximadamente 2000 registros.
Cada registro tiene una cadena y una categoría.
This is the first line, Line1
This is the second line, Line2
This is the third line, Line3
Necesito leer este archivo en una lista que se parece a esto;
List = [(''This is the first line'', ''Line1''),
(''This is the second line'', ''Line2''),
(''This is the third line'', ''Line3'')]
¿Cómo puedo importar esto esta csv
a la lista que necesito usando Python?
Actualización para Python3:
import csv
from pprint import pprint
with open(''text.csv'', newline='''') as file:
reader = csv.reader(file)
l = list(map(tuple, reader))
pprint(l)
[(''This is the first line'', '' Line1''),
(''This is the second line'', '' Line2''),
(''This is the third line'', '' Line3'')]
Si csvfile es un objeto de archivo, se debe abrir con newline=''''
.
módulo csv
Actualización para Python3 :
import csv
with open(''file.csv'', ''r'') as f:
reader = csv.reader(f)
your_list = list(reader)
print(your_list)
# [[''This is the first line'', ''Line1''],
# [''This is the second line'', ''Line2''],
# [''This is the third line'', ''Line3'']]
El siguiente es un fragmento de código que utiliza el módulo csv pero extrae el contenido de file.csv en una lista de dicts utilizando la primera línea, que es un encabezado de la tabla csv
import csv
def csv2dicts(filename):
with open(filename, ''rb'') as f:
reader = csv.reader(f)
lines = list(reader)
if len(lines) < 2: return None
names = lines[0]
if len(names) < 1: return None
dicts = []
for values in lines[1:]:
if len(values) != len(names): return None
d = {}
for i,_ in enumerate(names):
d[names[i]] = values[i]
dicts.append(d)
return dicts
return None
if __name__ == ''__main__'':
your_list = csv2dicts(''file.csv'')
print your_list
Extendiendo un poco sus requisitos y asumiendo que no le importa el orden de las líneas y desea agruparlas en categorías, la siguiente solución puede funcionar para usted:
>>> fname = "lines.txt"
>>> from collections import defaultdict
>>> dct = defaultdict(list)
>>> with open(fname) as f:
... for line in f:
... text, cat = line.rstrip("/n").split(",", 1)
... dct[cat].append(text)
...
>>> dct
defaultdict(<type ''list''>, {'' CatA'': [''This is the first line'', ''This is the another line''], '' CatC'': [''This is the third line''], '' CatB'': [''This is the second line'', ''This is the last line'']})
De esta forma, obtiene todas las líneas relevantes disponibles en el diccionario bajo la clave de la categoría.
Si está seguro de que no hay comas en su entrada, aparte de separar la categoría, puede leer el archivo línea por línea y split , luego, puede enviar el resultado a List
Dicho esto, parece que estás mirando un archivo CSV, por lo que podrías considerar usar docs.python.org/2/library/csv.html para él
Un bucle simple sería suficiente:
lines = []
with open(''test.txt'', ''r'') as f:
for line in f.readlines():
l,name = line.strip().split('','')
lines.append((l,name))
print lines
Use el módulo docs.python.org/2/library/csv.html (Python 2.x):
import csv
with open(''file.csv'', ''rb'') as f:
reader = csv.reader(f)
your_list = list(reader)
print your_list
# [[''This is the first line'', ''Line1''],
# [''This is the second line'', ''Line2''],
# [''This is the third line'', ''Line3'']]
Si necesitas tuplas:
import csv
with open(''test.csv'', ''rb'') as f:
reader = csv.reader(f)
your_list = map(tuple, reader)
print your_list
# [(''This is the first line'', '' Line1''),
# (''This is the second line'', '' Line2''),
# (''This is the third line'', '' Line3'')]
Versión de Python 3.x (por @seokhoonlee a continuación)
import csv
with open(''file.csv'', ''r'') as f:
reader = csv.reader(f)
your_list = list(reader)
print(your_list)
# [[''This is the first line'', ''Line1''],
# [''This is the second line'', ''Line2''],
# [''This is the third line'', ''Line3'']]
Pandas es bastante bueno en el manejo de datos. Aquí hay un ejemplo de cómo usarlo:
import pandas as pd
# Read the CSV into a pandas data frame (df)
# With a df you can do many things
# most important: visualize data with Seaborn
df = pd.read_csv(''filename.csv'', delimiter='','')
# Or export it in many ways, e.g. a list of tuples
tuples = [tuple(x) for x in df.values]
# or export it as a list of dicts
dicts = df.to_dict().values()
Una gran ventaja es que los pandas se ocupan automáticamente de las filas de los encabezados.
Si no has oído hablar de Seaborn , te recomiendo echarle un vistazo.
Ver también: ¿Cómo leo y escribo archivos CSV con Python?
result = []
for line in text.splitlines():
result.append(tuple(line.split(",")))