【问题标题】:Checking data in a file for duplicates (Python)检查文件中的数据是否重复(Python)
【发布时间】:2016-07-30 18:10:39
【问题描述】:

我正在尝试制作一个主题列表供另一个项目使用,并将主题存储在Topics.txt 中。但是,当主题存储在文件中时,我不想要重复的主题。因此,当我将主题保存到 Topics.txt 文件时,我也会将它们保存到 Duplicates.txt 文件中。我想要做的是创建一个条件语句,如果主题在Duplicates.txt 中,则不会将主题添加到Topics.txt。我的问题是,我不知道如何创建一个条件语句来检查主题是否列在Duplicates.txt 中。如果您扫描诸如“音乐”之类的关键字,看到“电子音乐”包含“音乐”一词,可能会出现问题。

Entry = input("Enter topic: ")
Topic = Entry + "\n"
Readfilename = "Duplicates.txt"
Readfile = open(Readfilename, "r")
Readdata = Readfile.read()
Readfile.close()
if Topic not in Duplicates:
    Filename = "Topics.txt"
    File = open(Filename, "a")
    File.append(Topic)
    File.close()
    Duplicate = Topic + "\n"
    Readfile = open(Readfilename, "a")
    Readfile.append(Topic)
    Readfile.close()

【问题讨论】:

  • 你能添加一些例子和示例代码吗?
  • 如何存储主题?每行一个?
  • 我不确定纯文本文件是否真的适合您的需求。 SQLite 表可以有不同的强制执行,也可以执行关键字搜索
  • 我用“\n”将每个主题每行存储一个,然后在我用其他程序阅读主题时去掉“\n”。

标签: python python-3.x duplicates keyword-search


【解决方案1】:

您可以逐行读取文件,这将产生像这样的解决方案

Entry = input("Enter topic: ")
Topic = Entry + "\n"
Readfilename = "Duplicates.txt"
found=False
with open(Readfilename, "r") as Readfile:
    for line in Readfile:
        if Topic==line:
            found=True
            break # no need to read more of the file

if not found:
    Filename = "Topics.txt"
    with open(Filename, "a") as File:
        File.write(Topic)

    with open(Readfilename, "a") as Readfile:
        Readfile.write(Topic)

【讨论】:

  • 如何转换以排除主题的大写变体?
  • @Capattax 看看string methods - 他们可以做很多有用的事情,通常字符串是区分大小写比较的("a"=="A" 评估为False
【解决方案2】:

您可以将您的主题存储在一个集合中。集合是唯一项的集合。

topics = {'Banjo', 'Guitar', 'Piano'}

您可以使用以下方式检查会员资格:

>>> 'Banjo' in topics
True

您通过.add()向集合添加新事物

topics.add('Iceskating')
>>> topics
set(['Banjo','Guitar', 'Piano', 'Iceskating'])

集合here 上的 Python 3 文档。套装教程页面是here

【讨论】:

  • 这对于检查一个文件上的重复项很有用,但我有两个程序可以将主题添加到Topics.txt。第一个程序手动添加主题,而另一个程序抓取页面的主题。因此,如果我有两组,每个程序一组,他们只会将重复项添加到各自的组中。他们将无法识别另一组中的重复项。
  • 集合的好处是,如果您的原始数据中有重复项,它将删除它们。因此,如果您有一个列表 ['one', 'two', 'two', 'three'] 并将其复制到一个集合中,那么该集合将是 ['one', 'two', 'three']
  • 补充一点,您正在做的事情似乎有可能过于复杂而无法使用简单的 .txt 文件来存储您的数据。我要第二个@cricket_007s 早先使用 SQLite 表的建议。
  • 我使用了@janbrohl 的方法,我能够成功地将主题存储在两个文件中,并且不会存储重复项。在存储主题的同时,我还可以存储包含该主题的主题(即“音乐”和“电子音乐”)
  • @Capattax 如果您想向主题添加更多信息,请使用sqllite 或查看json / pickle
猜你喜欢
  • 2011-03-25
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多