用python中的新列追加CSV文件

用python中的新列追加CSV文件,python,csv,Python,Csv,我试图创建一个干净的csv文件,将旧文件中的一些变量合并在一起,并将它们附加到一个新的csv文件中 我在第一次运行数据时没有问题。我得到了我想要的输出,但每当我试图用一个新变量(即新列)追加数据时,它会将变量追加到底部,并且输出不稳定 我基本上为每个变量运行相同的代码,除了更改 groupvariables变量到我想要的变量,然后使用f2=open('outputfile.csv',“ab”)csv是一种基于行的文件格式,因此向现有csv文件中添加列的唯一方法是将其读入内存并完全覆盖,将新列添加

我试图创建一个干净的csv文件,将旧文件中的一些变量合并在一起,并将它们附加到一个新的csv文件中

我在第一次运行数据时没有问题。我得到了我想要的输出,但每当我试图用一个新变量(即新列)追加数据时,它会将变量追加到底部,并且输出不稳定

我基本上为每个变量运行相同的代码,除了更改
groupvariables变量到我想要的变量,然后使用f2=open('outputfile.csv',“ab”)csv是一种基于行的文件格式,因此向现有csv文件中添加列的唯一方法是将其读入内存并完全覆盖,将新列添加到每行


不过,如果您只想添加行,那么添加行也可以。我假设每个csv文件中每行的第一个字段是记录的主键,可以用于匹配两个文件之间的行。下面的代码从一个文件中读入记录,将其存储在字典中,然后从另一个文件中读入记录,将值附加到字典中,然后写出一个新文件。您可以调整此示例以更好地适合您的实际问题

import csv
# using python3

db = {}
reader = csv.reader(open('t1.csv', 'r'))
for row in reader:
    key, *values = row
    db[key] = ','.join(values)

reader = csv.reader(open('t2.csv', 'r'))
for row in reader:
    key, *values = row
    if key in db:
        db[key] = db[key] + ',' + ','.join(values)
    else:
        db[key] = ','.join(values)

writer = open('combo.csv', 'w')
for key in sorted(db.keys()):
    writer.write(key + ',' + db[key] + '\n')

不是一个真正的答案,但是如果你想用表格数据做任何有意义的事情,包括对CSV进行分组和序列化,比如考虑到一个库,比如谢谢你,我会去看看。从你所提供的代码中,你还不清楚你要完成什么(因为它与你的描述不太匹配)。请提供一个示例数据。使用
mode='a'
打开附加文件用于添加从文件末尾开始的数据(新行/行)。向csv文件中添加一列数据通常需要在原始文件的每一行中添加一些内容并完全重写。将所有内容读取到内存中是一种方法。另一种方法是写入tempfile,然后再将其重命名为os.rename()。我已经用@dstromberg方法多次解决了这个问题。批处理读取文件A中的每一行,在内存中转换并附加到文件B中。这将使内存保持在批处理窗口中的行数。
import csv
# using python3

db = {}
reader = csv.reader(open('t1.csv', 'r'))
for row in reader:
    key, *values = row
    db[key] = ','.join(values)

reader = csv.reader(open('t2.csv', 'r'))
for row in reader:
    key, *values = row
    if key in db:
        db[key] = db[key] + ',' + ','.join(values)
    else:
        db[key] = ','.join(values)

writer = open('combo.csv', 'w')
for key in sorted(db.keys()):
    writer.write(key + ',' + db[key] + '\n')