【问题标题】:How to set/write list item values in a CSV file?如何在 CSV 文件中设置/写入列表项值?
【发布时间】:2018-11-22 09:04:11
【问题描述】:

我正在编写一个脚本来为我们工作中的零件生成唯一的资产编号。对于如何创建这些资产编号存在偏好。例如,如果我们记录了零件号和序列号(即单元格不为空白),则唯一资产编号应该是两者的结合。在 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,

【问题讨论】:

  • 没问题,已经列出了一些。
  • 是的,它们存在。它们是已导出为 CSV 的空白单元格
  • 我看到partnumber 有空数据
  • 是的,有些单元格在某些行上是空白的。我故意将它设置为测试用例。代码应首先检查 LSA 编号和条形码编号,然后检查零件编号和条形码编号等。我只想知道如何将列 [16] 写入 CSV 文件。

标签: python-3.x csv


【解决方案1】:

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

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

【讨论】:

  • 是的,我知道有一种更简单的方法可以为它执行逻辑,但我只是想知道如何在循环结束时将 column[16] 写入 CSV。
【解决方案2】:

对于任何感兴趣的人,我已经解决了。只需要创建一个列表,将第一个 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)

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多