Python ZIP函數從檔案中刪除太多項。

2024-09-30 22:16:33 发布

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

我从一个文本文件中读取内容并将其存储在一个列表中(每行作为一个元素)(prizeList)。我也在为winnerList做同样的事情,这是另一个列表

我使用一个zip函数调用emailUser函数,每次都有一个获奖者和一封电子邮件存在于同一个索引中。如果索引中至少有一个元素不存在,循环将停止

调用函数后,从列表中删除该奖品,从文件中删除所有内容,然后将列表内容写回文本文件(实际上是删除该元素)

问题是行prizeList.remove(prize)writeTo.write(prizes)从文本文件中删除了太多内容。在循环中,每次迭代都要删除一个元素(从txt文件中),而不是删除更多的元素

以下是我的尝试:

   for prize, winner in zip(prizeList, emailList):


    print(f'{prize} goes to {winner}')


    emailUserWithPrize(winner, prize, prizeType)

    print("Before: ")
    print(prizeList)

    prizeList.remove(prize)

    file.close()

    writeTo = open(prizeFile, "w")

    prizes = ""
    for i in range(len(prizeList)):
        prizes = prizeList[i]

    writeTo.write(prizes)



    print("After:")
    print(prizeList)

if len(prizeList) < 1:
    print("No more prizes for " + prizeType)

Tags: in元素内容列表forzipremovewrite
2条回答

似乎您可能无意中截断了一个列表(或者prizeList或者emailList),因为zip只在一个输入列表(更一般的迭代器)完成之前进行迭代,as documented
当然,你可以通过打印每个列表的长度来检查,但我猜这就是你问题的根源。
解决这个问题,取决于你实际想做什么,而我无法根据你的代码猜出足够的答案。
祝你好运


由于注释而更新:如果您担心没有正确地读取和/或写入文本文件,则这是另一个问题,应该单独检查和调试

让我们试着解构你的代码。 你在奖品列表和邮件列表的第一项中找到匹配项,对吗?然后从奖品列表中删除每个给定的奖品。然后,如果您还有任何奖品,请将其添加到奖品文件中

prize_list = ['p1', 'p2', 'p3', 'p4', 'p5', 'p6']
email_list = ['e1', 'e2', 'e3', 'e4']

matches = list(zip(prize_list, email_list))

for prize, winner in matches:
    print(f'{prize} goes to {winner}')
    print("Before: ", prize_list)
    print('removing', prize)
    prize_list.remove(prize)
    print('{} prizes left'.format(len(prize_list)))

prize_file = 'prizeFile.txt'
with open(prize_file, "w") as file_:
    for prize in prize_list:
        file_.write(prize)
        file_.write('\n')

输出:

p1 goes to e1
Before:  ['p1', 'p2', 'p3', 'p4', 'p5', 'p6']
removing p1
5 prizes left
p2 goes to e2
Before:  ['p2', 'p3', 'p4', 'p5', 'p6']
removing p2
4 prizes left
p3 goes to e3
Before:  ['p3', 'p4', 'p5', 'p6']
removing p3
3 prizes left
p4 goes to e4
Before:  ['p4', 'p5', 'p6']
removing p4
2 prizes left
After: ['p5', 'p6']

相关问题 更多 >