2017-01-24 9 views
-1

Ich möchte ein Wörterbuch aus einer Textdatei erstellen.Python - Erstellen von Wörterbuch mit Arrays aus Datei

Die Textdatei:

***Comment line - not to be read by program*** 
jdoe | doe | John Doe | 0001 | True 
jsmith | smith | John Smith | 0002 | False 

Das Wörterbuch vorzugsweise aussehen würde:

accounts = { 
'jdoe' : ['doe','John Doe', '0001', True], 
'jsmith' : ['smith', 'John Smith', '0002', False] 
} 

Welcher Code hierfür erforderlich wäre, zu arbeiten?

+1

Diese bekommen würde viel einfacher als [JSON] (https://docs.python.org/3/library/json.html) – ti7

+0

Willkommen bei Stackoverflow sein. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [zum Thema] (http://stackoverflow.com/help/on-topic) und [how to ask] (http://stackoverflow.com/help/how-to-ask) gilt hier. StackOverflow ist kein Codierungs- oder Lernprogramm. – Prune

+0

@ ti7 warum wäre das einfacher mit json? Viele Programme lesen und schreiben CSVs. Wir wissen nichts über die Quelle dieser Daten und es kann sehr schwierig sein, diese Quellen zu ändern. JSON ist ein Serialisierungsprotokoll, kein Kult. – tdelaney

Antwort

1

eine einfache Lösung wäre:

accounts={} 
with open("replacethiswithrealfilename") as f: 
    for line in f: 
     line=line.strip() 
     if line.startswith("***") or not line: 
      continue # ignore comments, ignore empty lines 
     sl=[s.strip() for s in line.split("|")] 
     sl[-1]=(sl[-1]=="True") 
     accounts[sl[0]]=sl[1:] 
0

Ich werde nur antworten, damit Sie etwas haben, aber ja, Sie sollten einige Python-Codierungsbücher lesen.

b = {} #your final dictionary 
a = "jdoe | doe | John Doe | 0001 | True" # for loop through the lines in a file, this is just one line 
a = a.split('|') #splits up your string into a list 
b[a[0]] = a[1:] # {'jdoe ': [' doe ', ' John Doe ', ' 0001 ', ' True']} 
1

Etwas wie folgt aus:

text_file_path = r'your_path' 

accounts = {} 
with open(text_file_path) as f: 
    for line in f.readlines()[1:]: 
     info = line.split(' | ') 
     if info: # possibly ignore blank line at end of file 
      key, values = info[0], info[1:] 
      values[-1] = values[-1] == 'True' 
      accounts[key] = values 

print(accounts) 
0

können Sie das csv Modul verwenden, um die Datei als Reihen von Tupeln zu lesen und erstellen Sie das Wörterbuch aus das iterierbar. Der komplizierende Faktor sind die Kommentarzeilen, aber das kann mit einem Generator gehandhabt werden, der sie streift, bevor der Leser sie sieht. Setzen Sie alles zusammen und Sie

import csv 

def strip_comments(fp): 
    """iterate uncommented lines of a file""" 
    for line in fp: 
     if not line.startswith('***'): 
      yield line 

with open('test.csv', 'r', newline='') as in_file: 
    reader = csv.reader(strip_comments(in_file), delimiter="|", skipinitialspace=True) 
    accounts = {row[0]:row[1:] for row in reader} 
Verwandte Themen