修改csv文件使用seek(0)方法创建不需要的重复输出

时间:2016-01-02 23:50:58

标签: python csv seek

我正在尝试对我的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

2 个答案:

答案 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)