Python:如何将含多行的字符串变量转为指定格式的单一列表?
问题分析与解决
你忽略的核心问题
- 循环内重复初始化列表:你的第一个循环里,
full_lst = []被放在循环体内部,每次遍历字符/行时都会创建新的空列表,导致每次只能保存当前迭代的单个元素,无法累积所有ID。 - 错误的分隔符选择:你的字符串内容是按换行符分隔的ID,但你用了
split(" ")(按空格分割),自然无法得到正确的分割结果;而直接遍历字符串for x in IDs会逐个取出每个字符,而非每行内容。
正确的解决方法
方法1:使用splitlines()快速处理
Python字符串的splitlines()方法会自动识别所有换行符(\n、\r\n等),并分割成每行内容,同时默认忽略末尾的空行,最适合你的场景:
# 获取IDs后直接转换 full_lst = IDs.splitlines() # 结果就是 ['123','456','789','876','543']
方法2:手动过滤(处理可能的空行/空白字符)
如果字符串中存在多余的空行或首尾空白,可以用列表推导式结合strip()过滤:
full_lst = [x.strip() for x in IDs.split('\n') if x.strip()]
这个写法会先按换行分割,再去除每个元素的首尾空白,最后过滤掉空字符串,确保列表里只有有效的ID。
整合到你的完整代码中
修改后的代码如下:
import xml.etree.ElementTree as ET import os path = 'data/path' for filenames in os.listdir(path): if filenames.endswith('.xml'): fullnames = os.path.join(path, filenames) tree = ET.parse(fullnames) root = tree.getroot() IDs = root[2].attrib.get("ProjectID") # 转换为目标格式的列表 full_lst = IDs.splitlines() # 或者用带过滤的版本: # full_lst = [x.strip() for x in IDs.split('\n') if x.strip()] print(full_lst) # 验证结果
内容的提问来源于stack exchange,提问作者Bronko
相关产品推荐
相关产品推荐

