gpt4 book ai didi

python - 在Python中,如果以元组中的值开头,我还需要返回哪个值

转载 作者:太空宇宙 更新时间:2023-11-03 17:00:35 25 4
gpt4 key购买 nike

我有一个放在元组中的区号文件

for line1 in area_codes_file.readlines():
if area_code_extract.search(line1):
area_codes.append(area_code_extract.search(line1).group())
area_codes = tuple(area_codes)

以及我用 Python 读入的一个包含电话号码的文件。如果电话号码以元组中的区号之一开头,我需要执行以下操作:1是保留号码2是知道它匹配的是哪个区号,因为需要将区号放在括号中。

到目前为止,我只能做 1:

for line in txt.readlines():
is_number = phonenumbers.parse(line,"GB")
if phonenumbers.is_valid_number(is_number):
if line.startswith(area_codes):
print (line)

我该如何做第二部分?

最佳答案

简单(如果不一定是最高性能)的方法是单独检查每个前缀,并保留第一个匹配:

for line in txt:
is_number = phonenumbers.parse(line,"GB")
if phonenumbers.is_valid_number(is_number):
if line.startswith(area_codes):
print(line, next(filter(line.startswith, area_codes)))

由于我们知道 filter(line.startswith, area_codes) 将准确获得一次命中,因此我们只需使用 next 拉取该命中。

注意:在 Python 2 上,您应该使用 from future_builtins import filter 启动文件以获取基于生成器的 filter (这也将通过在以下情况下停止搜索来节省工作量):你会受到打击)。 Python 3 的 filter 已经表现得像这样。

为了获得更高的性能,一次测试所有前缀并找出哪个值命中的方法是使用 regular expressions :

import re

# Function that will match any of the given prefixes returning a match obj on hit
area_code_matcher = re.compile(r'|'.join(map(re.escape, area_codes))).match
for line in txt:
is_number = phonenumbers.parse(line,"GB")
if phonenumbers.is_valid_number(is_number):
# Returns None on miss, match object on hit
m = area_code_matcher(line)
if m is not None:
# Whatever matched is in the 0th grouping
print(line, m.group())

最后,如果区号具有固定长度,您可以使用最后一种方法。您可以直接切片,而不是使用 startswith;你知道这个命中是因为你自己把它切下来的:

# If there are a lot of area codes, using a set/frozenset will allow much faster lookup
area_codes_set = frozenset(area_codes)
for line in txt:
is_number = phonenumbers.parse(line,"GB")
if phonenumbers.is_valid_number(is_number):
# Assuming lines that match always start with ###
if line[:3] in area_codes_set:
print(line, line[:3])

关于python - 在Python中,如果以元组中的值开头,我还需要返回哪个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35043162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com