查找文件中的所有URL

2024-05-12 21:09:12 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我的问题是我的代码只找到并打印列表中的最后一个url,而不是我想要的所有url

def convert(lst):
    return ' '.join(lst)

with open("test.txt", 'r') as f:
    for lines in f:
        test = convert(lines)
        urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', lines)

print(urls)

这是txt文件的一部分:

28                               https://letterboxd.com/film/deep-blue-sea/
29                   https://letterboxd.com/film/the-chronicles-of-riddick/
30                          https://letterboxd.com/film/sonic-the-hedgehog/
31                         https://letterboxd.com/film/the-babysitter-2017/

所以我不知道我的代码有什么问题,我不明白为什么它不循环文件中的所有行,它只打印列表中的最后一个url,https://letterboxd.com/film/the-babysitter-2017/,而不是列表中的所有url


Tags: the代码httpstesttxtcomurlconvert
2条回答

您的lines是文件中的每一行。您希望执行以下操作:

def convert(lst):
    return ' '.join(lst)

with open("test.txt", 'r') as f:
    lines = f.read()
    test = convert(lines)
    urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', lines)

print(urls)

绝对没有必要先阅读所有的行,然后再阅读它们。相反,您可以使用f.read()一步直接读取文件中的所有数据

试试这个:

with open("test.txt", 'r') as f:
        urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', f.read())

现在执行print(urls)将产生所需的输出

相关问题 更多 >