首页 > 解决方案 > 如果数据不存在,如何将数据插入文本文件(Python)

问题描述

我正在尝试在 Python 中创建一个网页抓取脚本,在其中我跟随一堆链接并将它们插入到 .txt 文件中。但是,只有当文件中不存在该网站时,我才想这样做。

到目前为止,我已经编写了这段代码来将给定的网站链接插入到文件中(不工作):

def writeSite(site):
    file = open("websites.txt", 'a+')

    # print(site)

    if site in file.read():
        return

    file.write(site + "\n")
    file.close()

提前致谢。

标签: pythonfileweb-scraping

解决方案


您非常接近,但是因为您打开文件以追加到它,它以文件指针结尾开始。您需要重新开始阅读其内容:

def writeSite(site):
    file = open("websites.txt", 'a+')
    file.seek(0)

    # print(site)

    if site in file.read():
        return

    file.write(site + "\n")
    file.close()

但是,请记住,这site in file.read()是非常粗糙的。

例如,假设您已经'http://somesite.com/page/'在文件中,但现在要添加'http://somesite.com/'- 整个 URL 不在文件中,但您的测试会找到它。

如果您想检查整行(并确保很好地处理文件),这会更好:

def writeSite(site):
    site += '\n'
    with open("websites.txt", 'a+') as f:
        f.seek(0)
        if site in f.readlines():
            return
        f.write(site)

它在站点名称中添加一个换行符以分隔文件中的 URL,并使用 readlines 来利用该事实来检查整个 URL。使用with确保文件总是被关闭。

而且由于您无论如何都想在写入之前阅读,因此您可以将'r+'其用作一种模式,并跳过搜索 - 但前提是您可以确定文件已经存在。我假设您选择了'a+',因为事实并非如此。

(如果您担心这会改变site- 的值,这仅适用于函数内部的参数。无论您在函数外部传递的任何值都不会受到影响)


推荐阅读