如何在CSV文件中设置/写入列表项值?

时间:2018-11-22 09:04:12

标签: python-3.x csv

我正在编写一个脚本,以为我们正在使用的零件生成唯一的资产编号。对于如何创建这些资产编号,存在偏爱。例如,如果我们记录了部件号和序列号(即单元格不是空白),则唯一资产号应为两者的结合。在CSV文件中,该名称为:

  

列[9] +'-'+列[12]

最后一个关于如何创建资产编号的偏好是一个完全组成但唯一的编号,我使用list()函数来创建。

我已经能够打开并读取数据来自的CSV文件,但是我不知道如何在文件中写入/编辑资产编号。 CSV中每一行的资产编号为[16]列。我习惯于在C中工作,并且期望将column [16]设置为某个值,它将在我正在使用的文件中将column [16]更改为该值。

import csv

list1 = list(range(500))
for item in list1:
    list1[item] = "RAND" + "-" + str(item).zfill(6)

with open('data.csv', mode='r') as csv:
    for num, line in enumerate(csv):
        column = line.strip().split(',')
        if column[9] != '' and column[12] != '':
            column[16] = column[9] + '-' + column[12]
        elif column[8] != '' and column[12] != '':
            column[16] = column[8] + '-' + column[12]
        elif column[10] != '' and column[12] != '':
            column[16] = column[10] + '-' + column[12]        
        elif column[12] != '':
            column[16] = column[12]
        elif:
            column[16] = list1[num]

样本数据:

PLCN,MLCN,PLCN Description,PLCN Unique ID,Remarks,Location,Classification,Part Number,Part Description,LSA Number,Serial Number,SN Description,Barcode Number,OMEGAPS LocationParent,Parent,MLCN Parent,Asset
H 1111,1111,Example Part,,,Brisbane,None,,PART100,LSA100,SERIAL100,,BAR100,,H 111,111,
H 1111,1111,Example Part,,,Brisbane,None,,PART100,,SERIAL100,,BAR100,,H 111,111,
H 1111,1111,Example Part,,,Brisbane,None,,,,SERIAL100,,BAR100,,H 111,111,
H 1111,1111,Example Part,,,Brisbane,None,,,,,,BAR100,,H 111,111,
H 1111,1111,Example Part,,,Brisbane,None,,,,,,,,H 111,111,

2 个答案:

答案 0 :(得分:0)

假设Part NumberSerial Number不为None。您可以使用熊猫轻松实现这一目标。

df = pd.read_csv("dummy.csv")
df["Unique_Id"] = df.apply(lambda x: str(x["Part Number"])+'_'+str(x["Serial Number"]), axis = 1)

答案 1 :(得分:0)

对于感兴趣的人,我已经解决了。只需创建一个列表,将第一个for循环的所有结果附加到该列表并将其写出到同一文件中即可:

import csv

list1 = list(range(500))
for item in list1:
    list1[item] = "RAND" + "-" + str(item).zfill(6)

list2 = []

with open('test.csv', mode='r') as csv:
    for num, line in enumerate(csv):
        column = line.strip().split(',')
        if column[9] != '' and column[12] != '':
            column[16] = column[9] + '-' + column[12]
        elif column[8] != '' and column[12] != '':
            column[16] = column[8] + '-' + column[12]
        elif column[10] != '' and column[12] != '':
            column[16] = column[10] + '-' + column[12]        
        elif column[12] != '':
            column[16] = column[12]
        else:
            column[16] = list1[num]
        list2.append(','.join(column))

with open('data.csv', mode='w') as new:
    for line in list2:
        new.write(line + '\n')
        print (line)