切换文件以从python的.csv阅读器中读取
问题描述:
我正在多次读取csv文件,但每次经过它时都会缩小其大小。所以,一旦我到达底部,我正在编写一个新的csv文件,即.csv文件的下半部分。然后,我希望将csv阅读器改为使用这个新文件,但它似乎没有工作......这就是我所做的。切换文件以从python的.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"
这是为什么不工作?
答
- 是
something = r_send.next()
在某种循环?你写它的方式,它只会读一行。 - 为什么你需要
",".join(line)
?你可以简单地打印line
本身,它应该工作。 - 另外,在关闭文件之前确实没有必要使用
seek(0)
。
答
我建议如下:
使用for something in r_send:
而非something = r_send.next()
;你甚至不需要try ... except块,因为你只需要把原始文件关闭到那个循环之外就可以了(就像其他人提到的那样,你甚至不会循环当前代码中的原始文件) 。那么你可能想要把所有的东西包装到另一个循环中,这样它就会一直持续下去,直到文件被完全处理。使用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)
类似的东西。
什么部分似乎没有工作?你收到什么错误信息?另外,你在某种循环中的代码的顶部部分? – Wilduck 2010-07-12 17:27:56