it-swarm.com.de

Python-Import-CSV-Liste

Ich habe eine CSV-Datei mit etwa 2000 Datensätzen. 

Jeder Datensatz hat eine Zeichenfolge und eine Kategorie.

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

Ich muss diese Datei in eine Liste einlesen, die so aussieht.

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

Wie kann diese csv in die Liste importiert werden, die ich mit Python benötige?

138
MorganTN

Verwenden Sie das Modul 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']]

Wenn Sie Tupel brauchen:

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.x-Version (von @seokhoonlee unten)

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']]
241
Maciej Gol

Update für 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']]
38
seokhoonlee

Pandas ist ziemlich gut im Umgang mit Daten. Hier ist ein Beispiel, wie man es benutzt:

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

Ein großer Vorteil ist, dass Pandas automatisch mit Kopfzeilen umgehen.

Wenn Sie noch nicht von Seaborn gehört haben, empfehle ich einen Blick darauf.

Siehe auch: Wie lese und schreibe ich CSV-Dateien mit 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')

Der Inhalt von df ist:

     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

Der Inhalt von Diktaten ist

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

Der Inhalt von tuples ist:

[['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]]
31
Martin Thoma

Wenn Sie sicher sind, dass Ihre Eingabe keine Kommas enthält, können Sie zeilenweise die Datei lesen und Teilen am , eingeben und dann das Ergebnis in List verschieben.

Es sieht jedoch so aus, als würden Sie eine CSV-Datei betrachten. Sie könnten die Module verwenden 

5
Miquel
result = []
for line in text.splitlines():
    result.append(Tuple(line.split(",")))
4
Acid_Snake

Update für 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')]

Wenn es sich bei csvfile um ein Dateiobjekt handelt, sollte es mit newline='' geöffnet werden.
csv-Modul

4
JawSaw

Eine einfache Schleife würde ausreichen:

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
Hunter McMillen

Hier ist der einfachste Weg in Python 3.x, um eine CSV in ein mehrdimensionales Array zu importieren, und zwar mit nur 4 Codezeilen, ohne etwas zu importieren!

#pull a CSV into a multidimensional array in 4 lines!

L=[]                            #Create an empty list for the main array
for line in open('log.txt'):    #Open the file and read all the lines
    x=line.rstrip()             #Strip the \n from each line
    L.append(x.split(','))      #Split each line into a list and add it to the
                                #Multidimensional array
print(L)
1
Jason Boucher

Wenn Sie Ihre Anforderungen etwas erweitern und annehmen, dass Sie sich nicht für die Reihenfolge der Zeilen interessieren und sie unter Kategorien gruppieren möchten, kann die folgende Lösung für Sie funktionieren:

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

Auf diese Weise erhalten Sie alle relevanten Zeilen, die im Wörterbuch verfügbar sind, wobei der Schlüssel die Kategorie ist.

1
Jan Vlcinsky

Als Nächstes folgt ein Code, der das csv-Modul verwendet, aber den Inhalt von file.csv in eine Liste von Diktaten extrahiert, wobei die erste Zeile verwendet wird, die eine Kopfzeile der csv-Tabelle ist

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 __== '__main__':
  your_list = csv2dicts('file.csv')
  print your_list
0

Wie bereits in den Kommentaren erwähnt, können Sie die csv-Bibliothek in Python verwenden. csv bedeutet kommagetrennte Werte, die genau in Ihrem Fall erscheinen: ein Label und ein durch Komma getrennter Wert.

Als Kategorie- und Werttyp würde ich lieber einen Wörterbuchtyp anstelle einer Liste von Tupeln verwenden.

Im folgenden Code zeige ich jedoch beide Möglichkeiten: d ist das Wörterbuch und l ist die Liste der Tupel.

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
Francesco Boi