f-string 干扰提取 URL

f-string interfering with extracting URLs

tl;f-string 博士弄乱了下面的脚本。尽管文件包含 URL 列表,但打印的列表是空的。我该如何解决这个问题并让 Python 打印出 URL?

所以我在下面有一个脚本。它下载 URL 列表,将其转换为列表,然后打印出来。现在,对于变量 link,有一个 f 字符串。如果我在 f 字符串中只保留一个值(假设我删除了 fromdatetodate,只保留 username),它就可以正常工作。但是如果我在 f 字符串中放入多个值,脚本就会失败。

命令

script.py -u mrbeast

脚本

import argparse, re, requests

parser = argparse.ArgumentParser()
parser.add_argument('-u','--username', required=False)
parser.add_argument('-from','--fromdate', required=False)
parser.add_argument('-to','--todate', required=False)
args = vars(parser.parse_args())
username = args['username']
fromdate = args['fromdate']
todate = args['todate']

link = "https://web.archive.org/cdx/search/cdx?url=twitter.com/{}/status&matchType=prefix&from={}&to={}".format(username,fromdate,todate)
listy = []

m = requests.get(link).text
urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', m)

for b, url in enumerate (urls):
    listy.append(f"{b}: {url}")
    
print(listy)

输出

[]

您遇到这种情况不是因为 f-strings,而是因为 python 格式化您的 link 的方式。变量 link 中没有使用 f-string,只是字符串格式。 传递空值时,python 将 None 送入 url 而不是像预期的那样将它们留空。 这导致 URL 看起来像这样

https://web.archive.org/cdx/search/cdx?url=twitter.com/None/status&matchType=prefix&from=None&to=None

一种解决方案是使用 or 逻辑运算符告诉 python 如果值为 none,则将变量设置为空字符串。这可以在变量声明中完成。 一种可能的方法如下

username = args['username'] or '' # or logic operator converts variable to '' if None.
fromdate = args['fromdate'] or ''
todate = args['todate'] or ''

希望对您有所帮助, 欢迎来到 stack overflow。