Ich habe eine Textdatei, die ich als CSV lese. Es hat zwei Felder pro Zeile, das zweite Feld kann jedoch mehrere Kommas haben oder nicht. Stellen wir uns vor, dies sind die Daten:

group-a,cats
group-b,dogs
group-c,snakes, turtles, lizards
group-d,fish, eels
group-e,people

Ich versuche, die txt-Datei so zu generieren, dass Anführungszeichen um jedes Feld gesetzt werden. Wenn dies jedoch nicht möglich ist, kann dies am besten zuverlässig analysiert werden, sodass Kommas nach dem ersten Komma (erstes Feld) stehen nie hat Kommas) effektiv ignoriert?

Für das, was es wert ist, benutze ich Python3.

1
amoreno 18 Apr. 2018 im 18:58

3 Antworten

Beste Antwort

Sie können einen optionalen Parameter maxsplit an str.split() übergeben, sodass Sie Ihre Zeilen nur mit dem ersten Komma teilen können:

with open("myfile.csv") as f:
    myData = [line.strip().split(",", 1) for line in f]

print(myData)
#[['group-a', 'cats'],
# ['group-b', 'dogs'],
# ['group-c', 'snakes, turtles, lizards'],
# ['group-d', 'fish, eels'],
# ['group-e', 'people']]
2
pault 18 Apr. 2018 im 16:16

Alle Kommas nach dem ersten Komma ignorieren:

Wie wäre es mit einem einfachen slicing?

with open("myfile.csv") as f:
    for line in f:
        k = line.find(',')
        print(line[:k+1] + line[k:].replace(',', ''))

Demo :

s = 'group-c,snakes, turtles, lizards'
k = s.find(',')
print(s[:k+1] + s[k:].replace(',', ''))

# group-c,snakes turtles lizards
0
Austin 18 Apr. 2018 im 16:26

So leicht wie:

import re
with open('in.txt') as f:
    for line in f:
        print (re.sub(r'^([^,]+),(.*)', r'"\1","\2"', line.strip("\n")))

"group-a","cats"
"group-b","dogs"
"group-c","snakes, turtles, lizards"
"group-d","fish, eels"
"group-e","people"
-1
wolfrevokcats 18 Apr. 2018 im 16:26