在 Python 中,如何在文本文件中的特定字符串后获取 10 个字符



我正在尝试从包含大约 1000 行数据的文本文件中读取输入,例如:

SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459

所需输出:

+447919311433

我想从文本文件中获取所有英国电话号码,并在搜索文件中的字符串 +44 后尝试获取 10 个 charecter。我正在使用python 2.7.5。请帮忙。

使用一个名为log.txttxt文件,其内容:

SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459

我们可以通过以下方式打开file进行阅读:

open("log.txt", "r")

然后,我们可以loop文件中的每个line,并尝试提取所需的数据。

regular expression解决方案:

要从line中提取数据,我们可以使用regular expression。如果您以前从未遇到过这些,它们是使用由不同特殊字符组成的patternstring中提取数据的方法。

为了我们可以在一行中获取2英国电话号码,我们将在线上使用re.findall功能。我创建了以下pattern来获取所有英国电话号码:

+44d{10}

它的工作原理是在'+'特殊字符上搜索带有转义''string'+44',然后在d{10}之后10digits(d表示数字,{10}表示其中10)。

然后我们可以将此expression放在一个loop中,该会将每个电话号码添加到list.由于re.findall也返回了一个列表,我们需要连接这些lists而不是appending。我们使用'+'操作数(或更简单地说是使用+=)来做到这一点。

制作代码,以提取file中的所有英国电话号码:

import re
numbers = []
with open("log.txt", "r") as f:
for line in f:
numbers += re.findall("+44d{10}", line)

对于您的2线路file问题,numbers只给出一个电话号码:

['+447919311433']

if-statement解决方案:

如果第二个英国电话号码来自英国,则此解决方案不会拾取Nick指出的英国号码,因为index()仅返回第一次出现

要从一行中提取数据,我们必须首先测试ifstring'+44'line中,如果是,我们希望在line中找到'+44'index,并将该index之后的10字符添加到数字list(请注意,.index()方法returnsstring开头的索引, 所以我们需要在索引后取13(10+3表示'+44'个字符)。

此代码如下所示:

numbers = []
with open("log.txt", "r") as f:
for line in f:
if '+44' in line:
start = line.index('+44')
numbers.append(line[start:start+13])

这将添加到列表中:numbers,它将以以下内容结束:

['+447919311433']

显然,如果您使用1000排列txt文件,那么这个list会更长!

希望这有帮助!

带有电话号码的字符串:

string="+440123456789+341234567890+442345678901+443456789012"

您将此算法应用于它:

for i in range(0,len(string)):
if string[i] == "+" and string[i+1] == "4" and string[i+2] == "4":
number = string[i:i+13]
print(number)

最新更新