2016-11-14 1 views
0

Ich habe eine Anforderung, wo ich meine Textdateien in csv konvertieren und Python dafür verwenden muss. Meine Textdatei sieht wie folgt aus,Umwandlung einer Textdatei in CSV-Datei mit Python

Employee Name : XXXXX 
Employee Number : 12345 
Age : 45 
Hobbies: Tennis 
Employee Name: xxx 
Employee Number :123456 
Hobbies : Football 

Ich möchte meine CSV-Datei die Spaltennamen als Name des Mitarbeiters, Mitarbeiternummer, Alter und Hobbys haben, und wenn ein bestimmter Wert ist nicht vorhanden es einen Wert von NA haben sollte dieser bestimmte Ort. Irgendwelche einfachen Lösungen, um dies zu tun? Vielen Dank im Voraus

+0

könnten Sie zeigen, was Sie bisher versucht haben? – Alex

+0

Ich habe eine CSV-Datei mit den Spaltennamen als Standard erstellt und auch die Textdatei geladen und meine Idee ist es, sie zusammen zu analysieren. Ich bin nicht in der Lage, sie zu analysieren. Ich bin nicht gut mit Pandas und suche daher nach anderen Möglichkeiten, diese Aufgabe zu erledigen. –

+0

Wird es mehr als einen Eintrag in Ihren realen Daten geben? Wie werden zwei Gruppen von Eigenschaften getrennt? –

Antwort

0

Sie etwas tun können:

records = """Employee Name : XXXXX 
Employee Number : 12345 
Age : 45 
Hobbies: Tennis 
Employee Name: xxx 
Employee Number :123456 
Hobbies : Football""" 

for record in records.split('Employee Name'): 
    fields = record.split('\n') 
    name = 'NA' 
    number = 'NA' 
    age = 'NA' 
    hobbies = 'NA' 
    for field in fields: 
     field_name, field_value = field.split(':') 
     if field_name == "": # This is employee name, since we split on it 
      name = field_value 
     if field_name == "Employee Number": 
      number = field_value 
     if field_name == "Age": 
      age = field_value 
     if field_name == "Hobbies": 
      hobbies = field_value 

Natürlich ist diese Methode geht davon aus, dass in jedem Datensatz (mindestens) Employee Name Feld vorhanden ist.

+0

Vielen Dank. Genau das, was ich brauchte. –

0

Vielleicht hilft Ihnen das beim Einstieg? Es ist nur die statische Ausgabe der ersten Mitarbeiterdaten. Sie müssten dies jetzt in eine Art Iteration über die Datei einbinden. Es ist sehr, sehr wahrscheinlich eine elegantere Lösung, aber das ist, wie Sie es ohne eine einzige Import-Anweisung tun würde;)

with open('test.txt', 'r') as f: 
    content = f.readlines() 
    output_line = "".join([line.split(':')[1].replace('\n',';').strip() for line in content[0:4]]) 
    print(output_line) 
+0

Sorry Kumpel. Ich konnte es nicht verstehen. Ich verstehe die Logik nicht. Ich bin ein Anfänger dazu. Wenn möglich, können Sie den Code für meine Anforderung genau aufschreiben und ich werde versuchen, dies zu verstehen und dann für meine geschäftlichen Anforderungen aufzubauen. Danke für Ihre Hilfe trotzdem! –

0

Ich befolgte sehr einfache Schritte dafür und ist möglicherweise nicht optimal, aber löst das Problem. Wichtiger Fall hier kann ich sehen, gibt es mehrere Schlüssel ("Mitarbeitername" usw.) in einer einzigen Datei. Schritte

  1. Lesen Sie die TXT-Datei zur Liste der Zeilen.
  2. convert Liste dict (Logik weiter verbessert oder komplexe lambdas sein kann hier hinzugefügt werden)
  3. einfach Pandas dict

Im Folgenden wird der Code in CSV konvertieren verwenden,

import pandas 

etxt_file = r"test.txt" 
txt = open(txt_file, "r") 
txt_string = txt.read() 


txt_lines = txt_string.split("\n") 
txt_dict = {} 


for txt_line in txt_lines: 
    k,v = txt_line.split(":") 
    k = k.strip() 
    v = v.strip() 
    if txt_dict.has_key(k): 
     list = txt_dict.get(k) 
    else: 
     list = [] 
    list.append(v) 
    txt_dict[k]=list 

print pandas.DataFrame.from_dict(txt_dict, orient="index") 

Ausgabe:

     0   1 
Employee Number 12345 123456 
Age     45  None 
Employee Name  XXXXX  xxx 
Hobbies   Tennis Football 

Ich hoffe, dass dies hilft.