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

标签 python csv seek

我正在尝试对我的 csv 文件进行以下调整。 - 操作 1 - 插入一列并填充变量 - 操作 2 - 删除文件的前 32 行 我尝试使用seek()方法重置文件位置来实现此目的。

运行时,csv 文件通过操作 1 插入我的列变量。 操作 2 附加一组重复的记录,减去 32 个删除项,且未插入任何列。

我想要的是应用于原始数据集的 2 个操作。我在想seek)可能不是我需要的。我还应该考虑什么?注意:数据文件很小

我的代码;

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

最佳答案

您可以跳过 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] 会为您完成此操作。

关于python - 使用seek(0)方法修改csv文件会创建不需要的重复输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34571941/

相关文章:

仅适用于开发环境的 Python 应用程序多线程

python - 嵌入式 python : multiprocessing not working

python - 用 Python 抓取城市词典

python - 如何在 Altair、Python 中使聚合点大小更大?

Java csv header 动态迭代

Perl split() 函数不处理保存为变量的管道字符

java - 将 hashmap 中的数据写入 CSV 文件

swift - 无法快速打开 CSV 文件

python - 如何使用python恢复文件的读取操作

安卓音频播放器