Importation de Python csv à la liste

j'ai un fichier CSV avec environ 2000 enregistrements.

chaque enregistrement a une chaîne, et une catégorie à elle.

This is the first line, Line1
This is the second line, Line2
This is the third line, Line3

je dois lire ce fichier dans une liste qui ressemble à ceci;

List = [('This is the first line', 'Line1'),
        ('This is the second line', 'Line2'),
        ('This is the third line', 'Line3')]

comment importer ce csv dans la liste dont J'ai besoin en utilisant Python?

123
demandé sur starkeen 2014-07-09 23:48:13

10 réponses

utilisez le module csv (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 vous avez besoin de tuples:

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')]

Python 3.version x (par @seokhoonlee ci-dessous)

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']]
220
répondu Maciej Gol 2017-02-01 14:15:59

mise à jour de 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']]
30
répondu seokhoonlee 2016-04-26 20:11:56

Pandas est assez bon à traiter avec des données. Voici un exemple d'utilisation:

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()

un grand avantage est que pandas traite automatiquement les lignes d'en-tête.

si vous n'avez pas entendu parler de Seaborn , je vous recommande d'y jeter un oeil.

voir aussi: Comment lire et écrire des fichiers CSV avec Python?

Pandas #2

import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
dicts = df.to_dict('records')

le contenu de df est:

     country   population population_time    EUR
0    Germany   82521653.0      2016-12-01   True
1     France   66991000.0      2017-01-01   True
2  Indonesia  255461700.0      2017-01-01  False
3    Ireland    4761865.0             NaT   True
4      Spain   46549045.0      2017-06-01   True
5    Vatican          NaN             NaT   True

le contenu des dicts est

[{'country': 'Germany', 'population': 82521653.0, 'population_time': Timestamp('2016-12-01 00:00:00'), 'EUR': True},
 {'country': 'France', 'population': 66991000.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': True},
 {'country': 'Indonesia', 'population': 255461700.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': False},
 {'country': 'Ireland', 'population': 4761865.0, 'population_time': NaT, 'EUR': True},
 {'country': 'Spain', 'population': 46549045.0, 'population_time': Timestamp('2017-06-01 00:00:00'), 'EUR': True},
 {'country': 'Vatican', 'population': nan, 'population_time': NaT, 'EUR': True}]

Pandas #3

import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
tuples = [[row[col] for col in df.columns] for row in df.to_dict('records')]

le contenu de tuples est:

[['Germany', 82521653.0, Timestamp('2016-12-01 00:00:00'), True],
 ['France', 66991000.0, Timestamp('2017-01-01 00:00:00'), True],
 ['Indonesia', 255461700.0, Timestamp('2017-01-01 00:00:00'), False],
 ['Ireland', 4761865.0, NaT, True],
 ['Spain', 46549045.0, Timestamp('2017-06-01 00:00:00'), True],
 ['Vatican', nan, NaT, True]]
27
répondu Martin Thoma 2018-08-29 05:25:18

si vous êtes sûr qu'il n'y a pas de virgule dans votre entrée, sauf pour séparer la catégorie, vous pouvez lire la ligne de fichier par la ligne et split sur , , puis pousser le résultat à List

cela dit, il semble que vous regardez un fichier CSV, donc vous pourriez envisager d'utiliser les modules pour it

4
répondu Miquel 2017-05-23 12:02:56
result = []
for line in text.splitlines():
    result.append(tuple(line.split(",")))
3
répondu Acid_Snake 2014-07-09 19:54:42

une simple boucle suffirait:

lines = []
with open('test.txt', 'r') as f:
    for line in f.readlines():
        l,name = line.strip().split(',')
        lines.append((l,name))

print lines
2
répondu Hunter McMillen 2014-07-09 19:54:52

mise à jour pour 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 est un objet file, il doit être ouvert avec newline='' .

module csv

2
répondu JawSaw 2018-01-05 03:44:24

étendre un peu vos exigences et en supposant que vous ne vous souciez pas de l'ordre des lignes et que vous voulez les regrouper dans des catégories, la solution suivante peut fonctionner pour vous:

>>> 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 Cette façon, vous obtenez toutes les lignes disponibles dans le dictionnaire sous clé la catégorie.

1
répondu Jan Vlcinsky 2018-04-03 21:40:09

suivant est un morceau de code qui utilise le module csv mais extrait le fichier.contenu csv à une liste de dicts en utilisant la première ligne qui est un en-tête de la table 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
0
répondu Alexey Antonenko 2017-07-12 08:06:24

comme déjà dit dans les commandes vous pouvez utiliser la bibliothèque csv en python. csv signifie valeurs séparées par des virgules, ce qui semble exactement votre cas: une étiquette et une valeur séparées par une virgule.

étant un type de catégorie et de valeur, je préférerais utiliser un type de dictionnaire plutôt qu'une liste de tuples.

de toute façon dans le code ci-dessous je montre les deux façons: d est le dictionnaire et l est la liste des tuples.

import csv

file_name = "test.txt"
try:
    csvfile = open(file_name, 'rt')
except:
    print("File not found")
csvReader = csv.reader(csvfile, delimiter=",")
d = dict()
l =  list()
for row in csvReader:
    d[row[1]] = row[0]
    l.append((row[0], row[1]))
print(d)
print(l)
0
répondu Francesco Boi 2018-06-11 08:26:13