我目前正在制作一个脚本,该脚本从两个来源中提取数据,其中一个是挪威邮政编码。挪威邮政编码由四位数组成,有些以零开头。
以下是代码:
#This section loads data on Norwegian post codes and places into a dictionary where postcode is key
f = open("postoversikt.txt", "r");
f1 = open("PCODES_USER_TRIM.txt","r") #load the file with all the users.
fo = open("pcodes_out","w")
place = {}
times = {}
for line in f:
words = line.rsplit("\t");
place[str(words[0])] = words[1]; #Reverse these to change the key and value - Default key: postcode value: place
number = 0;
number_unique = 0;
number_alike = 0;
for line in f1:
number = number + 1;
words1 = line.rsplit(";");
if not words1[1] in times:
number_unique = number_unique + 1;
times[words1[1]] = 1;
else:
number_alike = number_alike + 1;
times[words1[1]] = times[words1[1]] + 1;
for key, value in times.items():
print key+";"+value+";"+words[key];
fo.write(key+";"+value+";"+words[key]+"\n");
print "Totalt antall objekter behandlet er: "+ str(number);
print "Hvorav antall unike var: "+ str(number_unique);
print "Antall like nummer ble funnet: " + str(number_alike);
来自PCODES_USER_TRIM的一些行:
75621;4517;45 - 65
35214;7650;25 - 45
55624;9015;25 - 45
09523;5306;45 - 65
09051;2742;25 - 45
88941;1661;18 - 25
来自postoversikt.txt的一些行:
0001 OSLO 0301 OSLO P
0010 OSLO 0301 OSLO B
0015 OSLO 0301 OSLO K
0016 OSLO 0301 OSLO K
0017 OSLO 0301 OSLO K
0018 OSLO 0301 OSLO G
0021 OSLO 0301 OSLO K
0022 OSLO 0301 OSLO K
出现的问题之一是以零开头的邮政编码是初始零的条带。我的猜测是,这是由于内部转换为int(我只是Python的初学者,所以请原谅我的问题是否有点平凡)。我希望这些是四个数字xxxx的标准格式。我想从我的第一个问题出现的第二个问题是,我想将邮政编码的名称添加到最终打印出来。这不起作用,因为我无法使用键来引用单词中的位置。
我曾经使用str()方法将我打印的对象转换为Strings,但我在当前版本中没有这样做,因为我想通过root来处理问题。
有人可以帮我解决一下我的小问题吗?我如何使用rsplit将字符串放入单词字典而不将其转换为整数?
答案 0 :(得分:4)
如果你想要格式化一个整数,使其长度至少为4个整数(预填充零),你必须这样做:
integer = 5
s = "%04d" % integer
答案 1 :(得分:2)
Python是“强类型”,不会自动强制键类型或任何类型:
>>> d = {'01234':'value'}
>>> print d.items()
[('01234', 'value')]
我的代码中没有看到转换为int
的内容,但我很确定这不是您使用的代码,因为它至少包含一个语法错误:
fo.write("key+";"+value+";"+words[key]\n")
请粘贴您正在使用的实际代码。
此外,请从输入文档及其格式中提供几行代码,因此我们无需猜测。
此代码将执行您想要的操作。再一次,没有迹象表明领先的零丢失......
places = {}
for line in f:
post, place, _rest = line.split('\t',2)
places[post] = place
f.close()
times = {}
for line in f1:
_id, post, _rest = line.split(';',2)
times[post] = times.get(post, 0) + 1
f1.close()
for k,v in times.iteritems():
fo.write("%s;%s;%s\n" % (k,v,places[k]))
fo.close()
number = sum(times.itervalues())
number_unique = len(times)
number_alike = number - number_unique
print number, number_unique, number_alike
答案 2 :(得分:0)
只要计数操作产生正确的结果,python修剪4位数字(例如:0004 - > 4)的事实应该不成问题。
您需要的是按照您希望的方式格式化输出的简单方法。例如:
i=4
print "%4d" % i
给出结果:0004
i=1254
print "%04d" % i
给出结果:1254
python中字符串格式的更多细节: http://docs.python.org/release/2.4.4/lib/typesseq-strings.html