为什么这个python代码与自身冲突?
当我试着跑的时候为什么这个python代码与自身冲突?,python,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=fieldn
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)
“right.csv”文件中没有任何内容。但是,如果我把所有与制作正确的.csv文件有关的东西都拿出来,并把它放进一个不同的程序中,它就可以正常工作了。我需要结束这个循环吗?使用相同的读取器处理这两个问题是否有问题?输入文件可能已用尽,因此是的,这与重新使用
读取器
实例有关
不知道为什么您希望阅读器对象神奇地知道何时应该重新传递数据
您需要更明确地说明这一点,我只建议根据需要重新创建阅读器 而读卡器
耗尽确实是一个问题。您可以创建一个单独的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)
我修改了问题中的代码,使用了两个不同的阅读器,但仍然不起作用。很抱歉,我以前从未真正编程过-我不知道如何“更明确”。@user1879422“展开”的意思是文件本身已用尽(即,由于左读器已阅读所有内容,因此没有任何内容可供阅读)。关闭文件并再次打开,或者使用surveyfile.seek()
返回到其开头。哇,15分钟内有3个响应-你们真是太棒了!!我在两个阅读器之间放置了一个surveyfile.seek(0,0),它工作得非常完美。非常感谢。这可能是做事情的最好方式,但这似乎让我不知所措。它说itertools没有定义。我甚至都不知道那是什么,哈哈。我会去调查一下,看看我能不能把你的回答写进去。显然,这似乎是一种更优雅的方式。@user1879422 A抱歉,请尝试在文件顶部执行一个import itertools
。这些是我在itertools
中使用的两个函数的文档链接。和。