python - Python:如何对从 xlsx 文件中抓取的数据进行语法分析?
问题描述
目前我正在从 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, ...)
等(请注意,对于其中一些值,我会进行额外验证等)。所以它有效,但感觉有点“笨拙”。显然我可以将它们直接传递给函数,使其成为可能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
.
推荐阅读
- python - 是否有任何脚本或任何自动化?
- google-chrome - 如何解决与 iframe 相关的 Chrome 80 cookie 相关更改?
- sockets - 嗅探特定连接
- android - embarcadero rad studio 安卓谷歌地图应用
- jira - 如何从 Jira Webhook 响应中获取日期时间
- list - 获取自定义管理模块中所有类别和子类别的列表
- reactjs - 如何在使用 react-hook 调用 setState 后使用更新的状态
- prolog - 为什么我的谓词不起作用,而类似的谓词却起作用?
- git - github.com:权限被拒绝(公钥)
- php - 如何在 PHP 中将数组键添加到子数组