如何在丢失的csv字段中插入默认值?

2024-06-02 05:48:51 发布

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

我试图写一个csv附加值。我可以搜索并找到缺少字段的位置,但想知道是否有方法将0作为这些字段的默认值插入。在

我有以下代码。在

def fillBlanks():

    HEADERS =  ['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT',
                'PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT' ]
    fileH = open(outputDir+"PCT_SHORT_V_SHORT.csv", 'rb')
    reader = csv.DictReader(fileH, HEADERS)

    for row in reader:
        if any(row[key] in (None, "") for key in row):
           print "bad"+ str(row)

    fileH.close()

下面是缺少的行和列。在

^{pr2}$

有没有一种方法可以将默认值编码为不丢失字段?我想将字段设置为999或0。我希望这是清楚的,我是python新手。在

编辑: 这是一个数据样本 (“确定”、“2015”、“14”、“3”、“2014”、“28”、“17”、“2013”、“19”、“17”、“2012”、“36”、“12”) (“AZ”、“2015”、“14”、“2”、“2014”、“36”、“2”) ('ID'、'2015'、'12'、'0'、'2014'、'28'、'4'、'2013'、'24'、'2'、'2012'、'14'、'1')


Tags: csv方法key代码infordefyear
1条回答
网友
1楼 · 发布于 2024-06-02 05:48:51

DictReader有一个restval参数来设置缺失字段的默认值。在

但对于缺失的领域。。。在读取值的末尾,即:行中的字段比预期的少。在

在您的问题中不清楚您丢失的字段是在末尾还是在链的任何地方。或者如果缺少意味着将有两个连续的分隔符。在

另外,DictReader可能不是您最好的朋友:HEADERS定义中的某些字段具有相同的名称,因此将写入同一个键。如果这不是您的意图,您应该为每个头指定一个唯一的名称。在

编辑:跟随评论

下面代码中的头为每个csv字段提供了唯一的id,缺少的字段将用传递的值missing或{}填充。在

有了它,DictReader可以将每个读取的csv字段分配给各个键,或者用restval填充。在

DictWriter撤消该操作,并用已解析(可能已填充)的csv数据将其写回outpath

def fillBlanks(inpath, outpath, missing=None, writeheaders=False):
    # Assign unique identifiers in HEADERS to each csv field
    HEADERS = [
        'ST',
        'Year_1', 'PCT_SHORT_1', 'PCT_V_SHORT_1',
        'Year_2', 'PCT_SHORT_2', 'PCT_V_SHORT_2',
        'Year_3', 'PCT_SHORT_3', 'PCT_V_SHORT_3'
    ]

    # Open and parse file with default value for missing
    rfile = open(inpath, 'r')
    reader = csv.DictReader(rfile, fieldnames=HEADERS, restval=missing or '0')

    # Open and write to file with writer
    wfile = open(outpath, 'w')
    writer = csv.DictWriter(wfile, fieldnames=HEADERS)

    if writeheaders:
        writer.writeheaders()

    # Write each row from reader to writer
    for row in reader:
        writer.writerow(row)

相关问题 更多 >