为什么这个python代码与自身冲突?

2024-09-27 22:36:49 发布

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

当我想跑的时候

import csv
import sys
import operator

fieldnames = ["A","B","C","D","E"]
surveyfile = open("source.csv", "r")
left_file = open("left.csv",'wb')
right_file = open("right.csv",'wb')


left_reader = csv.DictReader(surveyfile, fieldnames=fieldnames, delimiter=",")
left_writer = csv.DictWriter(left_file, fieldnames, delimiter=",")
sortedlefts = sorted(left_reader,key=lambda x:float(x["B"]))

right_reader = csv.DictReader(surveyfile, fieldnames=fieldnames, delimiter=",")
right_writer = csv.DictWriter(right_file, fieldnames, delimiter=",")
sortedrights = sorted(right_reader,key=lambda x:float(x["B"]), reverse=True)

for row in sortedlefts:
    if row["E"] == "l":
        left_writer.writerow(row)


for row in sortedrights:
    if row["E"] == "r":
        right_writer.writerow(row)

“世界上什么也没有发生”右.csv“文件。但如果我拿走了所有与制造右.csv把它放进一个不同的程序,就可以了。我需要结束那个循环吗?使用同一个读卡器处理这两个问题吗?你知道吗


Tags: csvimportrightopenleftreaderfilewriter
2条回答

但这确实是一个reader耗尽的问题。您可以创建一个for循环并结合一些itertools帮助来解决这个问题。你知道吗

import itertools

left_reader, right_reader = itertools.tee(reader)

sortedlefts = sorted(left_reader,key=lambda x:float(x["B"]))
sortedrights = sorted(right_reader,key=lambda x:float(x["B"]), reverse=True)

for left, right in itertools.izip(sortedlefts, sortedrights):
    if left['E'] == 'l':
        left_writer.writerow(left)
    if right['E'] == 'r':
        right_writer.writerow(right)

输入文件可能已用尽,因此它与重新使用reader实例有关。你知道吗

不确定为什么您希望reader对象神奇地知道何时应该重新传递数据。你知道吗

您需要更明确地了解这一点,我只建议根据需要重新创建reader。你知道吗

相关问题 更多 >

    热门问题