2011-06-25 19 views
0

我有一个文本文件,看起来像这样:搜索区域码的txt文件在Python

Thomas Edgarson, Berliner Str 4, 13359 Berlin 
Madeleine Jones, Müller Str 5, 15992 Karlsruhe 
etc... 

它总是两个词,后跟一个逗号,然后两个单词和数字,逗号,区号和市。没有例外。

我用

f=open("C:\\Users\\xxxxxx\\Desktop\\useradresses.txt", "r") 
text=f.readlines() 
f.close() 

所以现在我有所有列的列表。我现在如何搜索这些字符串中的区号。我需要创建一个看起来像这样的字典

{'13359':[('Neuss','Wolfgang'),('Juhnke','Harald')]} 

相信我,我已经搜索过,但找不到有用的信息。对我来说,搜索字符串中的任意区域代码这样的东西的想法是新的,至今我还没有遇到过。

我会很高兴,如果你能给我一些指示,我应该在哪里寻找教程或给我一个想法从哪里开始。

回答

1
dic = {} 
with open('filename') as file: 
    for name, addr, zcode in (i.split(',') for i in file if i.rstrip()): 
     dic.setdefault(zcode.split()[0], []).append(name.split()) 

作为Sjoerd进一步说明问:

使用生成器表达式打破每一行中的3个变量:姓名,addr和zcode。然后我将Zcode分成所需的数字,并将其用作字典键。

由于该字典可能还没有关键,我使用setdefault方法,并在追加分割名称之前使用空列表设置键。

+0

不错的代码,但由于这是作业和简单的作业,海报不太可能理解你在这里做什么。另外,他的老师马上会看到他一直在作弊,如果他把这个交给我的。 – Sjoerd

+1

@Sjoerd那么我应该写错代码?大声笑 – JBernardo

+0

谢谢你,我对你的答案很感兴趣,但是我认为它比我作为一名Python程序员目前的水平低一点;)。但是我会尽力尝试,看看它做了什么。 – EdgarJames

-1

Python有很多库处理字符串操作,这是什么。你会想要re库和shlex库。我会建议下面的代码:

with open("C:\\Users\\xxxxxx\\Desktop\\useradresses.txt", "r") as f: 
    for line in f.readlines(): 
     split = shlex.split(line) 
     mydict[split[6]] = [(split[0], split[1])] 

这不会是完美的,它会覆盖相同的邮政编码,并删除一些值。它应该指出你在正确的方向。

+1

shlex类可以很容易地编写词法分析器,以获得类似Unix shell的简单语法。问题中的地址列表不是这样的。 – Sjoerd

1

Loop通过文件,读取行和split逗号。然后,通过空间分割处理每个部分。然后,将这些值添加到dictionary

+0

谢谢,这非常有帮助。我没有偶然发现** seperators **或** split **的概念,所以这就是我一直在寻找的东西。 – EdgarJames

1
d={} 

for line in open('useradresses.txt','r'): 
    if line.strip()=='': 
     continue 
    (name,strasse,plzort) = line.split(',') 
    nachname,vorname=name.split() 
    plz,ort=plzort.split() 
    if plz in d: 
     d[plz].append((nachname,vorname)) 
    else: 
     d[plz]=[(nachname,vorname),] 
print d