我正在多次阅读csv文件,但每次通过时都要缩小它的大小。所以,一旦我到达底部,我正在编写一个新的csv文件,例如,.csv文件的下半部分。然后我想改变csv阅读器来使用这个新文件,但它似乎没有用......这就是我所做的。
sent = open(someFilePath)
r_send = csv.reader(sent)
try:
something = r_send.next()
except StopIteration:
sent.seek(0)
sent.close()
newFile = cutFile(someFilePath, someLineNumber)
sent = open(newFile, "r")
r_send = csv.reader(sent)
cutFile的地方..
def cutFile(sender, lines):
sent = open(sender, "r")
new_sent = open(sender + ".temp.csv", "w")
counter = 0
for line in sent:
counter = counter + 1
if counter >= lines:
print >> new_sent, ",".join(line)
new_sent.close()
return sender + ".temp.csv"
为什么这不起作用?
答案 0 :(得分:1)
something = r_send.next()
处于某种循环中吗?你写它的方式,它只会读一行。 ",".join(line)
?你可以简单地打印line
本身,它应该可以工作。seek(0)
。答案 1 :(得分:0)
我建议如下:
使用for something in r_send:
而不是something = r_send.next()
;你甚至不需要尝试...除了块,因为你只需要把原始文件放在那个循环之外的东西(正如别人提到的那样,你甚至没有在当前代码中循环原始文件) 。然后你可能想要将所有这些包装在另一个循环中,以便它一直持续到文件被完全操作为止。
使用new_sent.write(line)
代替print >> new_sent, ",".join(line)
。并不是除了",".join
位(由于你没有使用csv
模块写入文件而不需要它)之外它会产生很大的不同,你不应该这样做无论如何在这里使用,但这使得你写一个文件的事实更加明显。
因此...
sent = open(someFilePath)
r_send = csv.reader(sent)
someLineNumber = len(sent.readlines())
while someLineNumber > 0:
for something in r_send:
# do stuff
someLineNumber /= 2 # //= 2 in Python 3
sent.close()
newFile = cutFile(someFilePath, someLineNumber)
sent = open(newFile, "r")
r_send = csv.reader(sent)
类似的东西。