如果项目已经在 txt 文件中,则从列表中删除项目

我正在尝试运行这段代码,但我遇到了问题,它没有按我的需要工作。

我需要的是检查项目列表中的代码是否已保存在 file.txt 中,如果它已经存在,我需要从列表中删除该项目。

然后将项目列表保存为新 file.txt 中的字符串


items = [['e5860', '2020-06-10'], ['e6056', '2020-06-10'], ['e6008', '2020-06-10'], ['100080020', '2020-06-10'], ['e6463', '2020-06-10'], ['KW13012', '2020-06-10'], ['e3589', '2020-06-10']]


for i, item in enumerate(items):

    with open('file.txt') as f:

        if item[0] in f.read():

            items.pop(items.index(item))


with open('file.txt', 'w') as f:

    f.write(str(items))


print(items)

当我第一次运行此代码时,file.txt 将为空,因此输出应为:


[['e5860', '2020-06-10'], ['e6056', '2020-06-10'], ['e6008', '2020-06-10'], ['100080020', '2020-06-10'], ['e6463', '2020-06-10'], ['KW13012', '2020-06-10'], ['e3589', '2020-06-10']]

然后,如果我再次运行相同的代码,输出应该是一个空的项目列表(因为它们之前都保存在文件中并从列表中删除)。


但是当我运行它时,第一个输出是正确的,我从项目中获取列表,如果我再次运行它然后我得到这个作为输出:


[['e6056', '2020-06-10'], ['100080020', '2020-06-10'], ['KW13012', '2020-06-10']]

为什么这个代码没有从列表中删除?


我发现从列表中删除的项目是列表的偶数。但我不明白为什么:/


三国纷争
浏览 132回答 1
1回答

当年话下

如果要将列表保存为列表,可以使用 json 模块对其进行序列化。这将使您可以轻松加载和保存列表。然后您可以加载文件并处理一个数据结构,让您轻松测试是否包含。套装是显而易见的选择。一旦你有了它,你就可以根据项目是否在这个集合中过滤你的列表,然后将列表转储回文件。这假定文件已经存在(即使它是空的):items = [['e5860', '2020-06-10'], ['e6056', '2020-06-10'], ['e6008', '2020-06-10'], ['100080020', '2020-06-10'], ['e6463', '2020-06-10'], ['KW13012', '2020-06-10'], ['e3589', '2020-06-10']]with open(filePath, 'r') as f:    data = f.read()    if data:        file_items = json.loads(data)        # create a set of just the first items in the sub lists:        seen = set(item[0] for item in file_items)    else: # empty file, make an empty set        seen = set()filtered = [item for item in items if item[0] not in seen]print(filtered)with open(filePath, 'w') as f:    json.dump(filtered,f)这将在空文件和包含所有 json 的文件之间交替items
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python