[英]f-string interfering with extracting URLs
tl;f-string 博士正在搞乱下面的脚本。 尽管文件包含 URL 列表,但打印的列表为空。 如何解决此问题并让 Python 打印出 URL?
所以我在下面有一个脚本。 它下载 URL 列表,将其转换为列表,然后将其打印出来。 现在,对于变量link
,有一个 f 字符串。 如果我在 f 字符串中只保留一个值(比如我删除fromdate
和todate
并只保留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 字符串,而是因为 python 格式化您的链接的方式。 变量链接中没有使用 f 字符串,只是字符串格式。 当传入 null 值时,python 将 None 输入到 url 中,而不是像预期的那样将它们留空。 这会导致 URL 看起来像这样
https://web.archive.org/cdx/search/cdx?url=twitter.com/None/status&matchType=prefix&from=None&to=None
一种解决方案是使用 or 逻辑运算符告诉 python 如果值为无,则将变量设置为空字符串。 这可以在变量声明中完成。 一种可能的方法如下
username = args['username'] or '' # or logic operator converts variable to '' if None.
fromdate = args['fromdate'] or ''
todate = args['todate'] or ''
我希望这会有所帮助,并欢迎堆栈溢出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.