在各种字母/数字的文件中找到PinCode

时间:2016-05-11 14:40:04

标签: python for-loop

给定一个名为“data.txt”的看似毫无意义的字母文件,编写一个函数findPin(inFile),返回文件中的四位数字密码。 (除了密码外,所有其他字符都是字母)

我知道我应该打开数据文件,然后遍历它,直到我遇到一个数字,但我不确定如何去做。 data.txt文件是......

loremipsumdolorsitametconsecteturadipiscingelit
seddoeiusmodtemporincididuntutlaboreetdoloremag
naaliquautenimadminimveniamquisnostrudexercitat
ionullamcolaborisnisiutaliquipexeacommodoconseq
uatduisauteiruredolorinrepre7269henderitinvolup
tatevelitessecillumdoloreeufugiatnullapariature
xcepteursintoccaecatcupidatatnonproidentsuntinc
ulpaquiofficiadeseruntmollitanimidestlaborumqwe

显然,引脚数是7269,但我需要帮助到达那里。对不起,我只是python的初学者,这真的让我感到沮丧。

3 个答案:

答案 0 :(得分:0)

使用filter

with open('data.txt', 'r') as f:
    pin_code = ''.join([filter(lambda x: x.isdigit(), line) for line in f])

print(pin_code)
# Output
7269

或使用re.sub

import re

with open('data.txt', 'r') as f:
    pin_code = ''.join([re.sub("\D", "", line) for line in f])

print(pin_code)
# Output
7269

答案 1 :(得分:0)

regex是一种比循环更健壮的方法,因为提供不同的字符串格式会导致循环失败。

string = """loremipsumdolorsitametconsecteturadipiscingelit
seddoeiusmodtemporincididuntutlaboreetdoloremag
naaliquautenimadminimveniamquisnostrudexercitat
ionullamcolaborisnisiutaliquipexeacommodoconseq
uatduisauteiruredolorinrepre7269henderitinvolup
tatevelitessecillumdoloreeufugiatnullapariature
xcepteursintoccaecatcupidatatnonproidentsuntinc
ulpaquiofficiadeseruntmollitanimidestlaborumqwe"""

这是使用regex

import re
results = re.findall(r"\d+", string)

这提供了可以合并的每个数字实例的列表:merged = "".join(result)

以下是网站的link,其中演示了regex模式匹配的一些常见用途,供您日后使用。

很少有人记住regex模式,但大多数程序员会知道何时使用它们并知道如何快速搜索正确的模式。

答案 2 :(得分:-3)

a = 'abc1234def'
for i in range(len(a)):
    if a[i].isdigit():
        print a[i:i+4]

更新了评论提示。