Python 替换csv标题而不删除其他行

Python 替换csv标题而不删除其他行,python,python-3.x,csv,Python,Python 3.x,Csv,我想替换cvs文件text.csv的标题行 标题将如下所示 column_1, column_2, column_3 这是我的密码 import csv with open('text.csv', 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(header_list) csv文件的标题已正确替换。但是,csv文件中的其余行已被删除。如何仅替换页眉而保留其他行不变 我正在使用python v3.6使用

我想替换cvs文件text.csv的标题行

标题将如下所示

column_1, column_2, column_3
这是我的密码

import csv
with open('text.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(header_list)
csv文件的标题已正确替换。但是,csv文件中的其余行已被删除。如何仅替换页眉而保留其他行不变

我正在使用python v3.6

使用以下内容:

import csv
header_list = ['column_1', 'column_2', 'column_3']
mystring = ",".join(header_list)
def line_prepender(filename, line):
    with open(filename, 'r+') as csvfile:
        content = csvfile.read()
        csvfile.seek(0, 0)
        csvfile.write(line.rstrip('\r\n') + '\n' + content)

line_prepender("text.csv", mystring)

下面是一个使用csv模块的正确方法。 DictReader将csv文件的内容读取到dicts列表中。它采用一个可选的fieldnames参数,如果set应用自定义标题并忽略原始标题并将其视为数据行,则该参数将被视为一个可选的fieldnames参数。所以,您需要做的就是读取您的csv 使用csv.DictReader归档,并使用csv.DictWriter写入数据。您必须删除读卡器中的第一行,因为它包含旧标题,然后写入新标题。不过,将新数据写入单独的文件是有意义的

import csv

header = ["column_1", "column_2", "column_3"]

with open('text.csv', 'r') as fp:
    reader = csv.DictReader(fp, fieldnames=header)

    # use newline='' to avoid adding new CR at end of line
    with open('output.csv', 'w', newline='') as fh: 
        writer = csv.DictWriter(fh, fieldnames=reader.fieldnames)
        writer.writeheader()
        header_mapping = next(reader)
        writer.writerows(reader)

谢谢,但解决方案不起作用。发生的情况是,预期的头被写入或附加到csv文件的底部。原始标题保持不变。非常感谢。我需要离开一会儿。我考试后会把你的答案标为正确答案。向上投票,谢谢!测试结果表明它能工作。标记为正确答案:我做了进一步的测试,发现你的答案不起作用。运行代码后,添加了新的头,但没有替换原始头。csv文件最后有两个头。好的,明白了。没有问题这不是一个文件,或者您正在销毁整个现有的text.csv,因为您正在用新数据覆盖文件,w不附加,它将覆盖。您创建了一个新的csv。OP希望标题位于相同的开头。csv@Agile_Eagle,有几种方法可以做到这一点。无论如何,在我看来,写到一个单独的文件更灵活。在需要的时候,你可以随时删除旧版本。你的答案经过测试,效果良好。然而,也有副作用。每行末尾都有一个额外的回车。因此,文件不是在每行末尾都有CR,LF,而是在每行末尾都有CR,CR,LF。@user3848207,它确实看起来很奇怪。我想你正在使用windows。解决您的问题。@taras,我确实在使用Windows。事实上,你得到了完全正确的答案:。这个答案解决了我的问题。
import csv

header = ["column_1", "column_2", "column_3"]

with open('text.csv', 'r') as fp:
    reader = csv.DictReader(fp, fieldnames=header)

    # use newline='' to avoid adding new CR at end of line
    with open('output.csv', 'w', newline='') as fh: 
        writer = csv.DictWriter(fh, fieldnames=reader.fieldnames)
        writer.writeheader()
        header_mapping = next(reader)
        writer.writerows(reader)