我试图找到一种方法来创建一个带有变量字段的namedtuple,具体取决于您收到的数据,在我的例子中,我使用的是来自StatCounter的数据,而不是所有的句点都是相同的浏览器。我试过这种方法,但它有点丑陋,我相信有一个更好的方法来实现它
def namedtuple_fixed(name: str, fields: List[str]) -> namedtuple:
"""Check the fields of the namedtuple and changes the invalid ones."""
fields_fixed: List[str] = []
for field in fields:
field = field.replace(" ", "_")
if field[0].isdigit():
field = f"n{field}"
fields_fixed.append(field)
return namedtuple(name, fields_fixed)
Records: namedtuple = namedtuple("empty_namedtuple", "")
def read_file(file: str) -> List["Records"]:
"""
Read the file with info about the percentage of use of various browsers
"""
global Records
with open(file, encoding="UTF-8") as browsers_file:
reader: Iterator[List[str]] = csv.reader(browsers_file)
field_names: List[str] = next(reader)
Records = namedtuple_fixed("Record", field_names)
result: List[Records] = [
Records(
*[
dt.datetime.strptime(n, "%Y-%m").date()
if record.index(n) == 0
else float(n)
for n in record
]
)
for record in reader
]
return result
“namedtuple\u fixed”函数用于修复具有无效标识符的名称
基本上,我想创建一个命名元组,根据您要分析的文件,它接收一个可变数量的参数。如果它结合了类型检查(我的意思是使用来自类型模块的NamedTuple),那就更好了。 提前谢谢
这解决了我的问题,但只是部分
使用types.SimpleSpace文档
它可能会导致问题,例如,如果您初始化如下所示的记录:
相关问题 更多 >
编程相关推荐