Python中如何将文本中的ID与属性分别保存到列表或字典
解决Python中提取ID和属性列表的问题
看起来你已经搞定了ID的提取,就差属性部分啦!别着急,我们可以用两种方式来实现——要么延续你原本的双列表思路,要么用字典让ID和属性的对应关系更直观,还要注意处理第一行里的and分隔符,不然会把attr8和前面的内容拆错哦。
方案1:双列表对应(nodes存ID,skills存属性列表)
这个方案和你最初的想法完全匹配,只需要补充属性处理的逻辑:
file = open("myfile.txt", "r") lines = file.readlines() nodes = [] skills = [] for x in lines: # 先去掉每行末尾的换行符和多余空格 line = x.strip() # 只按第一个空格分割,避免属性里出现空格(虽然你的例子里没有)导致出错 id_part, attr_part = line.split(maxsplit=1) # 把ID转成整数存入nodes nodes.append(int(id_part)) # 处理属性里的"and",替换成逗号,实现统一分割 cleaned_attrs = attr_part.replace(" and ", ",") # 按逗号分割成属性列表,存入skills skills.append(cleaned_attrs.split(",")) file.close() # 测试输出看看结果 print("Nodes列表:", nodes) print("Skills列表:", skills)
方案2:用字典存储(键为ID,值为属性列表)
如果想让ID和属性的对应关系更清晰,不用手动维护两个列表的索引,字典会是更合适的选择:
file = open("myfile.txt", "r") lines = file.readlines() id_attr_dict = {} for x in lines: line = x.strip() id_part, attr_part = line.split(maxsplit=1) node_id = int(id_part) cleaned_attrs = attr_part.replace(" and ", ",") id_attr_dict[node_id] = cleaned_attrs.split(",") file.close() # 测试输出看看结果 print("ID-属性字典:", id_attr_dict)
几个关键细节提醒
split(maxsplit=1):这个方法只会分割第一个空格,能避免属性内容里如果有空格(比如后续需求变更)导致的分割错误;- 处理
and:第一行里的attr4 and attr8必须转换成attr4,attr8,这样才能用逗号统一分割所有属性; - 更优雅的文件处理:推荐用
with语句自动管理文件,不用手动调用close():
nodes = [] skills = [] # with语句会在代码块结束后自动关闭文件 with open("myfile.txt", "r") as file: for line in file: line = line.strip() if not line: # 跳过空行,避免报错 continue id_part, attr_part = line.split(maxsplit=1) nodes.append(int(id_part)) cleaned_attrs = attr_part.replace(" and ", ",") skills.append(cleaned_attrs.split(","))
这样运行后,你就能得到完整的ID集合和对应的属性列表啦!
内容的提问来源于stack exchange,提问作者Lee Yaan
相关产品推荐
相关产品推荐

