我正在尝试从包含大约 1000 行数据的文本文件中读取输入,例如:
SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459
所需输出:
+447919311433
我想从文本文件中获取所有英国电话号码,并在搜索文件中的字符串 +44 后尝试获取 10 个 charecter。我正在使用python 2.7.5。请帮忙。
使用一个名为log.txt
的txt
文件,其内容:
SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459
我们可以通过以下方式打开file
进行阅读:
open("log.txt", "r")
然后,我们可以loop
文件中的每个line
,并尝试提取所需的数据。
regular expression
解决方案:
要从line
中提取数据,我们可以使用regular expression
。如果您以前从未遇到过这些,它们是使用由不同特殊字符组成的pattern
从string
中提取数据的方法。
为了我们可以在一行中获取2
英国电话号码,我们将在线上使用re.findall
功能。我创建了以下pattern
来获取所有英国电话号码:
+44d{10}
它的工作原理是在'+'
特殊字符上搜索带有转义''
的string
'+44'
,然后在d{10}
之后10
digits
(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()
仅返回第一次出现
要从一行中提取数据,我们必须首先测试if
string
:'+44'
在line
中,如果是,我们希望在line
中找到'+44'
的index
,并将该index
之后的10
字符添加到数字list
(请注意,.index()
方法returns
string
开头的索引, 所以我们需要在索引后取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)