wake-up-neo.com

Python-CSV-String zu Array

Kennt jemand eine einfache Bibliothek oder Funktion, um einen CSV-codierten String zu analysieren und in ein Array oder ein Wörterbuch zu verwandeln?

Ich glaube nicht, dass ich das eingebaute csv-Modul haben möchte , weil in allen Beispielen, die ich gesehen habe, Dateipfade und nicht Strings benötigt werden.

142
Drew LeSueur

Ich würde StringIO verwenden:

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

einfachere Version mit split() in Newlines:

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

Oder Sie können diese Zeichenfolge einfach mit \n als Trennzeichen in split()-Zeilen und dann in split()-Zeilen in Werte umwandeln. Auf diese Weise müssen Sie jedoch Zitate verwenden. Daher ist die Verwendung des csv-Moduls bevorzugt.

199
Michał Niklas

Einfach - das CSV-Modul arbeitet auch mit Listen:

>>> 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']]
57
adamk
>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']

So analysieren Sie eine CSV-Datei:

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
9
nvd

Wie bereits erwähnt, enthält Python ein Modul zum Lesen und Schreiben von CSV-Dateien. Es funktioniert ziemlich gut, solange die Eingabezeichen innerhalb der Grenzen von ASCII bleiben. Wenn Sie andere Kodierungen verarbeiten möchten, ist mehr Arbeit erforderlich.

Die Python-Dokumentation für das csv-Modul implementiert eine Erweiterung von csv.reader, die dieselbe Schnittstelle verwendet, jedoch andere Kodierungen verarbeiten kann und Unicode-Strings zurückgibt. Kopieren Sie einfach den Code aus der Dokumentation. Danach können Sie eine CSV-Datei wie folgt verarbeiten:

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

Per der Dokumentation:

Und obwohl das Modul das Analysieren von Strings nicht direkt unterstützt, ist dies einfach möglich:

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

Verwandeln Sie Ihren String einfach in eine einzige Elementliste.

Das Importieren von StringIO erscheint mir etwas übertrieben, wenn dieses Beispiel explizit in den Dokumenten enthalten ist.

5
roundar

Das offizielle Dokument für csv.reader()https://docs.python.org/2/library/csv.html ist sehr hilfreich, was besagt 

geeignet sind sowohl Dateiobjekte als auch Listenobjekte

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))
5
soulmachine

https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader

csvfile kann ein beliebiges Objekt sein, das das Iteratorprotokoll unterstützt und bei jedem Aufruf der next () -Methode eine Zeichenfolge zurückgibt

Daher sind eine StringIO.StringIO(), str.splitlines() oder sogar ein Generator gut.

3
ivan_pozdeev

Verwenden Sie diese Option, um eine CSV in eine Liste zu laden

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']]
2
JimS

Hier ist eine alternative Lösung:

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

Hier ist die Dokumentation

1
chfw

Panda ist eine sehr leistungsfähige und intelligente Bibliothek, die CSV in Python liest

Ein einfaches Beispiel hier, ich habe example.Zip-Datei mit vier Dateien darin.

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

Sobald Sie Daten haben, können Sie mit einer Liste oder anderen Formaten spielen.

0
webbyfox