向现有CSV文件添加新列
我有一个包含5列的csv文件,现在我想在第6列添加一些数据。这些数据我已经放在一个数组里。
目前,我的代码只能把我想放在第6列的数据添加到csv文件中所有已有数据的后面。
比如说,我有:
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'
可以把数据添加到新的一列,但实际上它只是把数据放在了所有其他数据的下面……我不知道该怎么办!
4 个回答
-1
打开文件的追加模式是为了在文件的末尾添加数据。你需要做的就是让你的文件写入可以随机访问。为此,你需要使用 seek() 方法。
你可以在这里看到一个例子:http://www.tutorialspoint.com/python/file_seek.htm
或者你可以在这里阅读 Python 的文档:https://docs.python.org/2.4/lib/bltin-file-objects.html,不过这个文档可能不是特别有用。
如果你想在某一列的末尾添加内容,你可能需要先打开文件,读取一行来确定它的长度,然后再移动到文件的末尾。
2
我们有一个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
2
csv
模块不支持直接写入或添加列。所以你能做的就是:从一个文件读取数据,添加第六列的数据,然后写入到另一个文件。下面是示例代码:
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
是一个整数列表。
我在Python中测试了这些代码,运行得很好。
9
追加写入是把数据加到文件的末尾,而不是每一行的末尾。
相反,你应该创建一个新文件,然后把新的值加到每一行后面。
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])
在Python 2.x中,去掉newline=''
这个参数,并把文件模式从'r'
和'w'
改成'rb'
和'wb'
。
一旦你确认这个方法正常工作后,可以用新文件替换掉原来的文件:
import os
os.remove(csvfile) # not needed on unix
os.rename('new_'+csvfile, csvfile)