python - 使用 csv.reader 和 csv.writer 写入同一文件而不是不同的文件?

标签 python csv python-2.7

如何将以下代码转换为写入同一文件,而不必写入新文件?

import csv
import itertools
from operator import itemgetter

def filter_data(data):
    for classname, group in itertools.groupby(data, itemgetter(2)):
        filtered_group = [line for line in group]
        new_count = len(filtered_group)
        for line in filtered_group:
            if line[5] == "Count":
                line[5] = "Counter"
            else:
                line[5] = new_count
            yield line

with open('main.csv', 'rb') as f_in, open('main1.csv', 'wb') as f_out:
    reader = csv.reader(f_in)
    writer = csv.writer(f_out)
    writer.writerows(filter_data(reader))

如果 stringio 不起作用,我的尝试...

import csv
import itertools
from operator import itemgetter
import StringIO

def filter_data(data):
    for classname, group in itertools.groupby(data, itemgetter(2)):
        filtered_group = [line for line in group]
        new_count = len(filtered_group)
        for line in filtered_group:
            if line[5] == "Count":
                line[5] = "Counter"
            else:
                line[5] = new_count
            yield line

output = StringIO.StringIO()

with open('../main.csv', 'rb') as f_in:
    reader = csv.reader(f_in)
    output.writelines(filter_data(reader))

contents = output.getvalue()
output.close()

with open('../main_test.csv', 'wb') as f_out: 
    f_out.writelines(contents)

最佳答案

尝试以下操作:

代码

import csv
import itertools
from operator import itemgetter
import StringIO

def filter_data(data):
    for classname, group in itertools.groupby(data, itemgetter(2)):
        filtered_group = [line for line in group]
        new_count = len(filtered_group)
        for line in filtered_group:
            if line[5] == "Count":
                line[5] = "Counter"
            else:
                line[5] = new_count
            yield ','.join(map(str, line)) + '\n'

output = StringIO.StringIO()

with open('../main.csv', 'rb') as f_in:
    reader = csv.reader(f_in)
    output.writelines(filter_data(reader))

contents = output.getvalue()
output.close()

with open('../main.csv', 'wb') as f_out: 
    f_out.writelines(contents)

这应该有效:)

关于python - 使用 csv.reader 和 csv.writer 写入同一文件而不是不同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284550/

相关文章:

python - 删除文件(如果存在); Python

macos - 向 CSV 列添加分隔符

python - 解析 pandas 日期时间的问题

javascript - 带有来自 CSV 的线层的传单 map

python - 坚持我所做的这段代码

windows - 在 Python 中使用通配符移动文件

python - 如何计算梯度来欺骗图像分类器?

python - 想要将旧的 6502 源代码 HEX 行转换为 .byte $00 行

python - 为什么我的列表没有按预期排序?

python - 将 csv 文件转换为 json,浮点值周围不带引号