例如: me.txt(包含数据和电话号码),信息低于信息
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
1.Phone number 1: (999) 999-3333
2.phone number 2: (888) 999 -2212
3.Phone number 3: (111) 222 - 2223
4.Phone number 4: (999)999-3333
5.Phone number 5: (888)222-2222
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6.Phone number: (999)999-3333
所以 o / p 应为:(999 )999-3333 - 3次
我的尝试:
txtFile = urllib.urlopen("http:// me.txt").readlines()
txtFile = "".join(char for char in txtFile if char.isdigit()) #removes everything that's not numeric.
phone_counter = {}
for phone in txtFile.split(" "): # split in every space.
if len(phone) > 0 :
if phone not in phone_counter:
phone_counter[phone] = 1
else:
phone_counter[phone] += 1
for i,phone in enumerate(sorted(phone_counter,key=phone_counter.get,reverse=True)[:-1]):
print "%s: %s - %s"%(i+1,phone,phone_counter[phone])
这样我就无法读取数字了。寻找 python 解决方案
答案 0 :(得分:3)
您只需要collections.Counter
from collections import Counter
text = '''\
(999) 999-3333
(888) 999-2212
(111) 222-2223
(999) 999-3333
(888) 222-2222
(999) 999-3333
'''
counter = Counter()
for phone in text.split('\n'):
counter[phone] += 1
print counter.most_common(1)
答案 1 :(得分:0)
您在代码中遇到了一些问题。我修复了最后一行的缩进错误。接下来,您的方法必须遍历文件的字符; readlines 会返回一个字符串列表,每行一个。你的第二行必然返回null,因为没有完整的行会满足 isdigit 。
另外,请注意,删除所有非数字将为您留下60位数的字符串。我认为这不是你想要的。
我强烈建议你重新开始并使用增量编程:写几行来检索输入。调试那些。在这些工作之前不要前进。 然后您可以编写想要检测电话号码的处理。
由于另一个答案,您需要做的就是将文件分成不同的电话号码。小心:电话号码有嵌入空格。
答案 2 :(得分:0)
你的文本文件似乎有一些不相关的东西。仅使用数字将使数字不可读,因为它们与文本中的随机数合并。
由于我无法确定某一行上电话号码的确切格式,因此您可以使用正则表达式从一行中提取该号码。
您也可以使用collections.Counter
,如上面的答案。
import re
from collections import Counter
NUMBER_RE = re.compile(r'\((\d{3})\)\s?(\d{3})\s?-\s?(\d{4})')
# \d{3} = 3 digits
# \s? = optional space
def format_number(re_match):
"""Makes sure that the spacing is consisten to count them properly"""
return '({0[0]}) {0[1]} - {0[2]}'.format(re_match)
txtFile = urllib.urlopen("http:// me.txt").readlines()
counter = Counter()
for line in txtFile:
for match in NUMBER_RE.findall(line):
counter[format_number(match)] += 1
most_common = counter.most_common(1)[0]
print("'{0[0]}' appears {0[1]} times.".format(most_common))