如何为文本文件每一行创建对象并迭代命名、逐行赋值对应属性?
问题解答
需求可实现性说明
这个需求技术上可以实现,但确实不推荐动态生成st0、st1这类独立变量名,这种写法会大幅降低代码可维护性,后续你要批量操作站点对象时会非常麻烦,用列表/字典存储对象是更合理的方案。
不推荐但可达成你要求的实现方案
如果你确实需要生成st0、st1这类全局变量,可以通过修改globals()全局命名空间实现,同时修正你现有代码的语法、资源泄漏等问题:
class Site: # 修正__init__方法的缩进错误 def __init__(self, siteName, siteSerial): self.name = siteName self.serial = siteSerial # 用with语句自动关闭文件,避免资源泄漏 with open('/path/to/sites.txt', 'r', encoding='utf-8') as f: lines = f.readlines() for i in range(len(lines)): # 去除首尾空白(包括换行符)后再分割,避免属性带无效字符 split = lines[i].strip().split(',') # 往全局命名空间注入对应名称的变量 globals()[f"st{i}"] = Site(split[0], split[1])
运行后你就可以直接调用st0.name、st1.serial这类属性了。
更推荐的标准实现方案
更建议你用列表存储所有Site对象,后续遍历、筛选操作都更方便,也完全保留按序号访问的能力:
class Site: def __init__(self, siteName, siteSerial): self.name = siteName self.serial = siteSerial st = [] with open('/path/to/sites.txt', 'r', encoding='utf-8') as f: for line in f: name, serial = line.strip().split(',') st.append(Site(name, serial))
使用时你可以用st[0]对应原来的st0,st[1]对应st1,既可以按索引取值,也可以直接用for site in st:批量遍历所有站点对象。
内容的提问来源于stack exchange,提问作者Jeremy Bilben
相关产品推荐
相关产品推荐

