如何创建新的连接列?

2024-09-27 22:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.csv,它有如下数据:

30,972.74176,0.446378,1.825426,cl+l  
31,1015.075579,0.279686,2.950118,l  
32,1072.59334,0.273239,4.408458,cl+l  
33,1139.55317,-1.616904,4.756378,l  
34,1279.86304,50.335186,3.877577,r  
35,1181.541419,61.399389,5.155133,r  
36,1097.421199,63.809733,5.37508,r  
37,1018.555678,64.034432,2.59232,r

我编写了一个程序,它将最后一列(在我的程序中称为E)为“l”或“cl+l”的行取出,并将其复制到另一个名为左.csv". 我要做的是在左.csv它从第二列(B)获取数据,在它们之间加一个逗号,然后从D列获取数据

所以,左.csv现在看起来像:

30,972.74176,0.446378,1.825426,cl+l  
31,1015.075579,0.279686,2.950118,l  
32,1072.59334,0.273239,4.408458,cl+l  
33,1139.55317,-1.616904,4.756378,l

我想要的是:

30,972.74176,0.446378,1.825426,cl+l,"972.74176,1.825426"  
31,1015.075579,0.279686,2.950118,l,"1015.075579,2.950118"    
32,1072.59334,0.273239,4.408458,cl+l,"1072.59334,4.408458"   
33,1139.55317,-1.616904,4.756378,l,"1139.55317,4.756378"

我应该如何去实现这一点,我如何告诉程序,逗号不应该开始下一个条目,即使它是csv?有可能吗?我需要括号或者其他分隔符吗?我现在的代码是:

import csv
import sys
import operator

fieldnames = ["A","B","C","D","E"]
surveyfile = open("source.csv", "r")
left_file = open("left.csv",'wb')
right_file = open("right.csv",'wb')
coil_file = open("coil1.csv","wb")


reader = csv.DictReader(surveyfile, fieldnames=fieldnames, delimiter=",")
left_writer = csv.DictWriter(left_file, fieldnames, delimiter=",")
sortedlefts = sorted(reader,key=lambda x:float(x["B"]))

surveyfile.seek(0,0)

right_writer = csv.DictWriter(right_file, fieldnames, delimiter=",")
sortedrights = sorted(reader,key=lambda x:float(x["B"]), reverse=True)

coil_writer = csv.DictWriter(coil_file, fieldnames, delimiter=",")

for row in sortedlefts:
    if row["E"] == "l" or row["E"] == "cl+l":
        left_writer.writerow(row)
        coil_writer.writerow(row)   


for row in sortedrights:
    if row["E"] == "r":
        right_writer.writerow(row)
        coil_writer.writerow(row)

Tags: csvimport程序rightclopenleftfile
1条回答
网友
1楼 · 发布于 2024-09-27 22:28:50

只需在row中添加一个额外的值,格式为包含逗号:

row['F'] = '%s,%s' % (row['E'], row['B'])

或者使用','.join()

row['F'] = ','.join([row['E'], row['B']])

但一定要在left_writer的字段中包含'F'

left_writer = csv.DictWriter(left_file, fieldnames + ['F'], delimiter=",")

如果将coil_writer实例配置为忽略额外列,则无需为其创建单独的循环或在现有循环中创建row的副本:

coil_writer = csv.DictWriter(coil_file, fieldnames, delimiter=",", extrasaction='ignore')

csv作者将为您处理报价。你知道吗

相关问题 更多 >

    热门问题