我正在尝试通过将一些变量从旧文件合并在一起并将它们附加到新的csv文件来创建一个干净的csv文件。
我第一次运行数据没问题。我得到了我想要的输出但是每当我尝试用新变量(即新列)附加数据时,它将变量附加到底部并且输出是不稳定的。
我基本上为每个变量运行相同的代码,除了更改 groupvariables变量到我想要的变量,然后使用f2 = open('outputfile.csv',“ab”)< ---但是用ab进行修改。任何帮助将不胜感激
groupvariables=['x','y']
f2 = open('outputfile.csv', "wb")
writer = csv.writer(f2, delimiter=",")
writer.writerow(("ID","Diagnosis"))
for line in csv_f:
line = line.rstrip('\n')
columns = line.split(",")
tempname = columns[0]
tempindvar = columns[1:]
templist = []
for j in groupvariables:
tempvar=tempindvar[headers.index(j)]
if tempvar != ".":
templist.append(tempvar)
newList = list(set(templist))
if len(newList) > 1:
output = 'nomatch'
elif len(newList) == 0:
output = "."
else:
output = newList[0]
tempoutrow = (tempname,output)
writer.writerow(tempoutrow)
f2.close()
答案 0 :(得分:2)
CSV是一种基于行的文件格式,因此将列添加到现有CSV文件的唯一方法是将其读入内存并完全覆盖它,将新列添加到每一行。
如果你想要做的只是添加行,那么追加将会正常工作。
答案 1 :(得分:0)
这可能会有所帮助。我假设每个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')