为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

三国纷争 2023-01-04 14:18:52
我正在尝试运行这段代码,但我遇到了问题,它没有按我的需要工作。我需要的是检查项目列表中的代码是否已保存在 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']]为什么这个代码没有从列表中删除?我发现从列表中删除的项目是列表的偶数。但我不明白为什么:/
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

如果要将列表保存为列表,可以使用 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


查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信