2013-12-18 44 views
1

我想通过将一些变量合并到一个旧文件并将它们附加到一个新的csv文件来创建一个干净的csv文件。在python中添加一个新列的CSV文件

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

我已经基本运行每个变量的相同的代码,除改变 groupvariables变量到我所需的变量,然后用F2 =开放(“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

不是一个真正的答案,但如果你希望做什么用的表格数据,包括分组和CSV序列化到/考虑寻找到像[熊猫]库显著(HTTP://pandas.pydata .org /) – Iguananaut

+0

谢谢我会在那里看看。 – user3008983

+0

从代码中你不清楚你提供了什么你想要完成的事情(因为它不符合你的描述)。请提供[SSCCE](http://sscce.org/)样本数据。 – martineau

回答

2

CSV是基于行的文件格式,因此将列添加到现有的CSV文件的唯一方法是将其读入内存,并将其全部覆盖,将新列添加到每一行。

如果你想要做的只是添加,但是,追加将工作正常。

+2

好吧,将它全部读入内存是一种方法。另一个是写入一个临时文件,然后写入os.rename()。 – dstromberg

+1

我用@dstromberg方法多次解决了这个问题。批量读取文件A中的每一行,在内存中转换并追加到文件B.这会将内存保留在批处理窗口中的行数中。 – deepelement

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') 
相关问题