2016-04-20 10 views
3

Ich habe Datei in folgendem Format:Parsen der Datei in Python

Berlin, Germany 
New Delhi , India 
New York , USA 
Mumbai , India 
Seattle, USA 

Ich brauche die Datei zu analysieren und die Ausgabe als

Germany : Berlin 
India: New Delhi , Mumbai 
USA: New York, Seattle 

ich einen Code drucken schrieb:

enter code here: 

def check(): 
    datafile=open('logfile.py','rU') 
    found=False 
    for line in datafile: 
     if 'India' in line: 
      lines=line.split() 
      print("India"+":"+lines[0]) 
     if 'Germany' in line: 
      lines=line.split() 
      print("Germany"+":"+lines[0]) 
     if 'USA' in line: 
      lines=line.split() 
      print("USA"+":"+lines[0]) 
    datafile.close() 
check() 

Dieser Code gibt Ausgabe als:

Germany:Berlin 
India:NewDelhi 
USA:NewYork 
India:Mumbai 
USA:Seattle 

Bitte helfen Sie.

+1

Wie geht es Ihnen einen Standard 'split()' und er verliert die Kommas? – TigerhawkT3

+0

Im Wesentlichen müssen Sie, wie Sie in der ersten Antwort sehen können, Listen für alle Länder erstellen. Der Trick besteht also darin, eine Länderliste zu erstellen und dann zu entscheiden, ob ein Land bereits existiert oder nicht, und die Stadt an die Länderliste anzufügen. – roadrunner66

+0

@ roadrunner66 - 'collections.defaultdict' verwaltet all das für dich – PaulMcG

Antwort

4

Ein weiterer Ansatz ist die Verwendung von defaultdict von collections dies zu erreichen:

from collections import defaultdict 

def check(): 
    d = defaultdict(list) 
    with open('logfile.py', 'rU') as datafile: 
     for line in datafile: 
      data = line.split(',') 
      d[data[1].strip()].append(data[0].strip()) 
    return d 
res = check() 

for k, v in res.items(): 
    print("{} : {}".format(k, ', '.join(v))) 

Ausgang:

India : New Delhi, Mumbai 
Germany : Berlin 
USA : New York, Seattle 
+0

Schön - jetzt frage ich mich, wie man diesen irrationalen Abstand in der ursprünglichen 'erforderlichen' Liste bekommt. – usr2564301

2

Anstatt alles direkt zu drucken, können Sie es in einer Datenstruktur wie einem Wörterbuch oder collections.defaultdict speichern.

import collections.defaultdict as dd 
result = dd(list) 
with open('logfile.py', 'rU') as datafile: 
    for line in datafile: 
     city,country = map(str.strip, line.strip().split(',')) 
     result[country].append(city) 

dann Ihre Ergebnisse drucken:

for country in result: 
    print(country+':', ', '.join(result[country])) 

Wenn Sie denken, es sein kann doppelte Land/Stadt Inserate und Sie wollen sie nicht, verwenden set und add statt list und append.

Verwandte Themen