2016-11-14 4 views
0

Also habe ich versucht, dieses Problem für eine ganze Weile zu beheben und habe versucht, herauszufinden, warum mein Code nicht funktioniert, aber ich kann einfach nicht bekommen das Wörterbuch mit dem richtigen Schlüssel drucken: Wertpaare, die ich brauche.Python Konvertieren von CSV-Datei mit Komma-Trennzeichen ins Wörterbuch

Also hier ist die Geschichte. Ich lese eine CSV-Datei, wo die erste Spalte Textabkürzungen sind und in der zweiten Spalte die volle englische Bedeutung sind. Jetzt habe ich mehrere Möglichkeiten versucht, diese Datei zu öffnen, sie zu lesen und sie dann in dem von uns erstellten Wörterbuch zu speichern. Mein Problem ist, dass die Datei gelesen wird, und wenn ich die getrennten Stücke drucke (ich glaube, es geht durch die ganze Datei, aber ich weiß es nicht, da es um Linie 1007 abgeschnitten wird, aber bis 4600 geht. Das Problem all das Zeug ist, dass, wenn ich es in Schlüssel setzen jetzt nehmen wollen:.. Wert-Paare in einem Wörterbuch der einzige, der die erste Zeile in der Datei ist gespeichert wird

Hier ist der Code:

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     #line = line.strip() 
     data = line.split(',') 
     print data 
     dic[data[0]] = data[1] 
     print dic 

Was habe ich angenommen, war die Frage war:

print dic 

Da er druckt innerhalb der Schleife, aber da es in der Schleife ist, sollte es immer drucken, wenn es immer wieder durchläuft. Ich bin verwirrt darüber, was ich falsch mache. Die anderen Methoden, die ich zu verwenden versuchte, waren json, aber ich weiß nicht so viel darüber, wie man es benutzt, und dann lese ich auch über das csv-Modul nach, aber ich glaube nicht, dass unser Professor will, dass wir das benutzen Ich hatte gehofft, dass jemand meinen Fehler entdeckte. Danke im Voraus!!!

EDIT

Dies ist die Ausgabe meines Programms

going to be late\rg2cu', 'glad to see you\rg2e', 'got to eat\rg2g', 'got to go\rg2g2tb', 'got to go to the bathroom\rg2g2w', 'got to go to work\rg2g4aw', 'got to go for a while\rg2gb', 'got to go bye\rg2gb2wn', 'got to go back to work now\rg2ge', 'got to go eat\rg2gn', 'got to go now\rg2gp', 'got to go pee\rg2gpc', 'got 2 go parents coming\rg2gpp', 'got to go pee pee\rg2gs', 'got to go sorry\rg2k', 'good to know\rg2p', 'got to pee\rg2t2s', 'got to talk to someone\rg4u', 'good for you\rg4y', 'good for you\rg8', 'gate\rg9', 'good night\rga', 'go ahead\rgaalma', 'go away and leave me alone\rgafi', 'get away from it\rgafm', 'Get away from me\rgagp', 'go and get pissed\rgaj' 

, die bis zum Ende der Datei für ein bisschen geht weiter und dann nach, dass das gesamte Wörterbuch drucken sein angenommenes, in denen ich erhalte diese

{'$$': 'money\r/.'} 

zusammen mit einem

none 

EDIT 2

Hier ist der vollständige Code:

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     line = line.strip() 
     data = line.split(',') 
     print data 
     dic[data[0]] = data[1] 
     print dic 

if __name__ == "__main__": 
    x = createDictionary("textToEnglish.csv") 
    print x 

EDIT 3

Hier ist die Datei, die ich in ein Wörterbuch zu machen versuchen

https://1drv.ms/u/s!AqnudQBXpxTGiC9vQEopu1dOciIS

+2

Können Sie uns zeigen, ein bisschen Ausgang dieses? –

+0

Meinen Sie, was Sie vom Terminal aus sehen, wenn ich das Programm starte? Wenn dem so ist, bin ich noch neu auf dieser Seite und weiß nicht, wie ich es neben einem Screenshot zeigen soll? –

+0

* Ich glaube, es geht durch die ganze Datei, aber ich weiß es nicht, da es um Linie 1007 abgeschnitten wird, aber durch 4600 geht. * Leider ist der Glaube nicht Teil der Programmierung, da es keine Magie in unserem gibt Arbeit - funktioniert Ihr Code mit kleineren Dateien, möglicherweise weniger als 1000 Zeilen? Wie genau bricht der Code? –

Antwort

1

Fügen Sie einfach eine return in Ihre Funktion ein. Außerdem wird die Dictionary-Länge aufgrund wiederholter Werte in der ersten Spalte von csv nicht mit csv-Zeilen übereinstimmen. Dictionary-Schlüssel müssen eindeutig sein. Wenn also ein erneut verwendeter Schlüssel einem Wert zugewiesen wird, ersetzt der zweite Wert den vorherigen Wert.

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     #line = line.strip() 
     data = line.split(',') 
     print(data) 
     dic[data[0]] = data[1] 
    return dic 

if __name__ == "__main__": 
    x = createDictionary("textToEnglish.csv") 
    print type(x) 
    # <class 'dict'> 

    print len(x) 
    # 4255 

for k, v in x.items(): 
    print(k, v) 

und versuchen, nicht zu print Wörterbuch auf einmal vor allem mit so vielen Werten, die auf Speicher intensiven Kopf wird. Sehen Sie, wie Sie mit der for Schleife durch Schlüssel und Werte iterieren können.

0

Obwohl mit den anderen angebotenen Lösungen nichts falsch ist, könnten Sie Ihre Lösungen vereinfachen und stark erweitern, indem Sie Pythons ausgezeichnete Bibliotheks-Pandas verwenden.

Pandas ist eine Bibliothek zum Umgang mit Daten in Python, die von vielen Data Scientists bevorzugt wird.

Pandas verfügt über eine vereinfachte CSV-Schnittstelle zum Lesen und Parsen von Dateien, mit der eine Liste von Wörterbüchern zurückgegeben werden kann, die jeweils eine einzelne Zeile der Datei enthalten. Die Schlüssel sind die Spaltennamen, und die Werte sind die in jeder Zelle.

In Ihrem Fall:

import pandas 

    def createDictionary(filename): 
     my_data = pandas.DataFrame.from_csv(filename, sep=',', index_col=False) 
     list_of_dicts = [item for item in my_data.T.to_dict().values()] 
     return list_of_dicts 

    if __name__ == "__main__": 
     x = createDictionary("textToEnglish.csv") 
     print type(x) 
     # <class 'list'> 
     print len(x) 
     # 4255 
     print type(x[0]) 
     # <class 'dict'> 
Verwandte Themen