2016-04-20 57 views
3

我有以下格式文件:解析文件在Python

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

我需要解析文件和打印输出作为

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

我写了代码:

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() 

此代码输出为:

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

请帮忙。

+1

你是如何做一个默认的'分裂()'和失去逗号? – TigerhawkT3

+0

基本上,正如你在第一个答案中看到的那样,你必须为所有国家制作清单。所以诀窍在于开始一个国家名单,然后决定一个国家是否已经存在,然后将该城市附加到国家名单。 – roadrunner66

+0

@ roadrunner66 - 'collections.defaultdict'为你管理所有这些 – PaulMcG

回答

4

另一种方法,是使用defaultdictcollections来实现这一目标:

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))) 

输出:

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

不错 - 现在它让我想知道如何在原始的'required'列表中获得那种非理性的间距。 – usr2564301

2

不是直接打印所有内容,而是将其保存为数据结构,如字典或collections.defaultdict

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) 

然后打印结果:

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

如果你觉得有可能是重复的国家/城市列表,你不希望他们使用setadd代替listappend