【问题标题】:Skipping blank cell from csv file in a python loop在 python 循环中从 csv 文件中跳过空白单元格
【发布时间】:2020-05-31 15:53:33
【问题描述】:

我目前正在提取 csv 文件中的值以将它们合并到 yaml 文件中。

问题在于,在我的 csv 文件的约 6000 行中,有几个单元格是空的,我想跳过这些单元格并继续我的循环,就像:

import csv
import ruamel.yaml
from csv import reader
from ruamel.yaml import YAML

yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True

with open('config.yaml') as yml:
    doc = yaml.load(yml)

with open('params.csv') as f:
    next(f)
    for i, data in enumerate(reader(f)):
        doc['components']['star']['init'][0]['values']['logg'] = float(data[4])
        filename = data[1].split(".")[0] 
        with open(f'{filename}.yaml', 'w') as out:
            yaml.dump(doc, out)

csv 文件看起来像:

Starid   filename                                   Teff           TeffErr        logg
1        ngc6397id000000002jd2456871p6250f000.fits  6304.19055182  97.72410249    4.21614564
2        pgc6397id000000002jd2456871p6250f000.fits  7304.19055182  97.72410249    
3        qgc6397id000000002jd2456871p6250f000.fits  8304.19055182  97.72410249    5.21614564

我已经尝试过Python: How to check if cell in CSV file is empty?的解决方案 但我认为我做错了,我看不到在正确的位置集成if not row[0] 循环,知道吗? 谢谢!

【问题讨论】:

    标签: python csv yaml


    【解决方案1】:

    如果我正确理解您的问题,您可以像这样插入对值的检查:

    with open('params.csv') as f:
        next(f)
        for i, data in enumerate(reader(f)):
            if data[4] != '':
                doc['components']['star']['init'][0]['values']['logg'] = float(data[4])
                filename = data[1].split(".")[0] 
                with open(f'{filename}.yaml', 'w') as out:
                    yaml.dump(doc, out)
    

    【讨论】:

    • 嗯,这似乎工作得很好,而且很简单,谢谢!
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多