我正在尝试对我的csv文件进行以下调整。 - 操作1 - 插入列并填充变量 - 操作2 - 删除文件的前32行 我试图用seek()方法重置文件位置来实现这一点。
运行时,csv文件通过操作1插入我的列变量。 操作2附加一组重复的记录,减去32个删除但未插入列。
我想要的是应用于原始数据集的2个动作。我在想寻求)可能不是我需要的。我还应该考虑什么?注:数据文件很小
我的代码;
with open(temp_filename, 'r', newline='') as inf, \
open(local_filename, 'w', newline='') as outf:
reader = csv.reader(inf)
writer = csv.writer(outf)
all = []
row = next(reader)
# insert column and fill
for row in (reader):
all.append([str(ASXCode)] + row)
writer.writerows(all)
inf.seek(0)
# delete first 32 rows
for _ in range(32): # skip first 32 rows
next(reader)
writer.writerows(reader) # copy the rest
答案 0 :(得分:1)
您可以跳过32行并且永远不会处理这些行,不需要从输出中“删除”那些行。
在将数据复制到另一个文件时添加列:
from itertools import islice
with open(temp_filename, 'r', newline='') as inf, \
open(local_filename, 'w', newline='') as outf:
reader = csv.reader(inf)
writer = csv.writer(outf)
next(islice(reader, 32, 32), None) # skip 32 rows
# write to output file with extra column
for row in (reader):
writer.writerow([str(ASXCode)] + row)
您只需要寻找是否必须重新读取文件中的所有数据,但您很少需要这样做。作为跳过的替代方法,您可以在写入输出CSV之前从all
列表中删除32个条目; del all[:32]
会为你做到这一点。
答案 1 :(得分:0)
鉴于这些更改旨在发生,并且您的文件很小,请执行以下操作:
with open('test.csv', 'r') as inf:
reader = csv.reader(inf)
lines = [[ASXCode] + row for row in list(reader)[32:]]
with open('test.csv', 'w') as outf:
writer = csv.writer(outf)
writer.writerows(lines)