Python: 如何从 xlsx 文件中抓取语法数据?

Python: How do I syntax data scraping from xlsx file?

目前我正在从 xlsx 文件中抓取一些数据。我的代码有效,但看起来一团糟——至少对我而言。 所以我不确定我的代码是否符合 PEP8。

from openpyxl import load_workbook
[...]
        for row in sheet.iter_rows():
            id = row[0].value
            name = row[1].value
            second_name = row[2].value
            # ignore the following
            # middle_name = row[3].value
            city = row[4].value
            address = row[5].value
            field_x = row[7].value
            field_y = row[10].value
            some_function_to_save_to_database(id, name, second_name, ...)

等(请注意,对于其中一些值,我会进行额外验证等)。 所以能用但是感觉有点"clunky"。显然我可以将它们直接传递给函数,使它成为 some_function_to_save_to_database(row[0].value, row[1].value, ...),但这样更好吗?感觉我在这一篇中失去了很多可读性。

所以我的问题如下:这是好的方法还是应该将这些字段的字段名称映射到行顺序?什么样的风格才是正确的抓取方式?

您的代码没有违反 PEP8。但是,这有点麻烦。如果数据发生变化,也不容易维护。也许你可以试试:

DATA_INDEX_MAP = {
    'id' : 0,
    'name' : 1,
    'second_name' : 2,
    'city' : 4,
    'address' : 5,
    'field_x' : 7,
    'field_y' : 10
}

def get_data_from_row(row):
    return {key:row[DATA_INDEX_MAP[key]].value for key in DATA_INDEX_MAP}

for row in sheet.iter_rows():
    data = get_data_from_row(row)
    some_function_to_save_to_database(**data)

那你只需要修改DATA_INDEX_MAP.

dict 的更轻量级替代:

from operator import itemgetter

get_data = itemgetter(0, 1, 2, 4, 5, 7, 10)
for row in sheet.iter_rows():
    data = [x.value for x in get_data(row)]
    some_function_to_save_to_database(*data))