Python 向现有csv文件添加新列

Python 向现有csv文件添加新列,python,Python,我有一个5列的csv文件,我想在第6列中添加数据。我拥有的数据在一个数组中 现在,我的代码将只在csv文件中已经存在的所有数据之后,在第6列中插入我想要的数据 例如,我有: wind, site, date, time, value 10, 01, 01-01-2013, 00:00, 5.1 89.6 ---> this is the value I want to add in a 6th column but it puts it after all the data fro

我有一个5列的csv文件,我想在第6列中添加数据。我拥有的数据在一个数组中

现在,我的代码将只在csv文件中已经存在的所有数据之后,在第6列中插入我想要的数据

例如,我有:

wind, site, date, time, value
10, 01, 01-01-2013, 00:00, 5.1
89.6    ---> this is the value I want to add in a 6th column but it puts it after all the  data from the csv file
以下是我正在使用的代码:

csvfile = 'filename'
with open(csvfile, 'a') as output:
    writer = csv.writer(output, lineterminator='\n')
    for val in data:
        writer.writerow([val])

我认为使用
'a'
会将数据附加到一个新列中,但它只是将其放在所有其他数据之后('under')。。。我不知道该怎么办

打开文件的附加模式旨在向文件末尾添加数据。您需要做的是提供对文件写入的随机访问。您需要使用seek()方法

您可以在此处看到和示例:

或者在这里阅读python文档:这不是非常有用


如果要添加到列的末尾,可能需要打开文件,读取一行以计算其长度,然后查找到末尾。

将写入数据附加到文件的末尾,而不是每行的末尾

csvfile = 'filename'
with open(csvfile, 'r') as fin, open('new_'+csvfile, 'w') as fout:
    reader = csv.reader(fin, newline='', lineterminator='\n')
    writer = csv.writer(fout, newline='', lineterminator='\n')
    if you_have_headers:
        writer.writerow(next(reader) + [new_heading])
    for row, val in zip(reader, data)
        writer.writerow(row + [data])
相反,创建一个新文件并将新值附加到每一行

csvfile = 'filename'
with open(csvfile, 'r') as fin, open('new_'+csvfile, 'w') as fout:
    reader = csv.reader(fin, newline='', lineterminator='\n')
    writer = csv.writer(fout, newline='', lineterminator='\n')
    if you_have_headers:
        writer.writerow(next(reader) + [new_heading])
    for row, val in zip(reader, data)
        writer.writerow(row + [data])
在Python2.x上,删除
newline='
参数,并将文件模式分别从
'r'
'w'
更改为
'rb'
'wb'

一旦确定此操作正常,您可以使用新文件替换原始文件:

import os
os.remove(csvfile) # not needed on unix
os.rename('new_'+csvfile, csvfile)

csv
模块不支持写入或追加列。因此,您唯一能做的就是:从一个文件中读取,附加第6列数据,然后写入另一个文件。如下所示:

with open('in.txt') as fin, open('out.txt', 'w') as fout:
        index = 0
        for line in fin:
            fout.write(line.replace('\n', ', ' + str(data[index]) + '\n'))
            index += 1
data
是一个
int
列表


我用python测试了这些代码,它运行得很好。

我们有一个CSV文件,即data.CSV,它的内容是:

#data.csv
1,Joi,Python
2,Mark,Laravel
3,Elon,Wordpress
4,Emily,PHP
5,Sam,HTML
现在,我们希望在此csv文件中添加一列,并且此列中的所有条目都应包含相同的值,即某个文本

示例

from csv import writer
from csv import reader
new_column_text = 'Something text'

with open('data.csv', 'r') as read_object, \
    open('data_output.csv', 'w', newline='') as write_object:
    csv_reader = reader(read_object)
    csv_writer = writer(write_object)
    for row in csv_reader:
        row.append(new_column_text)
        csv_writer.writerow(row)
输出

#data_output.csv
1,Joi,Python,Something text
2,Mark,Laravel,Something text
3,Elon,Wordpress,Something text
4,Emily,PHP,Something text
5,Sam,HTML,Something text

-1.低级文件查找是此作业的错误工具。这是有问题的,因为每次写入都会破坏现有数据,除非先将其移位以适应新值。正确地这样做会很麻烦,而且可能效率低下。
对于iter中的line(fin.readline,”)
最好写成
对于fin中的line