【发布时间】:2016-04-14 11:42:02
【问题描述】:
我有一个脚本可以成功地从 csv 文件中删除一列。目前它通过创建一个新文件来做到这一点。我希望它写入原始文件而不是创建一个新文件。 我已经尝试过使用 r+ 模式打开,但它没有按我想要的方式工作。请参阅下面的注释。我认为 r+ 模式是我需要的模式,但我正在努力寻找可行的示例来学习。
我的代码:
import csv
in_file = "Path to Source"
out_file = "Path to Result"
with open(in_file, 'r', newline='') as inf, \
open(out_file, 'w', newline='') as outf:
reader = csv.reader(inf)
writer = csv.writer(outf)
for r in reader:
writer.writerow((r[0],r[1],r[2],r[3],r[4],r[5],r[6]))
尝试使用r+模式:
with open(in_file, 'r+', newline='') as inf:
reader = csv.reader(inf)
writer = csv.writer(inf)
for r in reader:
writer.writerow((r[0],r[1],r[2],r[3],r[4],r[5],r[6]))
这会失败并出现错误list index out of range
【问题讨论】:
-
据我所见,当读者阅读时,作者在写作。文件有一个“光标”,即读取/写入文件的当前位置。所以作者正在覆盖读者刚刚阅读的那一行之后的下一行。为什么不创建一个新文件然后重命名它?