如何按空行分隔对文本文件中的数据进行分组
问题
我有一个以空行分隔数据的文本文件mydata.txt,希望将其解析为指定的字典格式(键为intro开头的行,对应值为后续相关行组成的列表)。当前代码运行后得到扁平化列表,如何调整代码以获取预期输出?
文件内容(mydata.txt)
introA aboutA1 aboutA2 aboutA3 aboutA4 introB aboutB1 aboutB2 aboutB3 aboutB4
当前代码
with open("mydata.txt", "r") as f: data = [line.strip() for line in f if line.strip()] print(data)
当前输出
['introA', 'aboutA1', 'aboutA2', 'aboutA3', 'aboutA4', 'introB', 'aboutB1', 'aboutB2', 'aboutB3', 'aboutB4']
预期输出
"introA": ['aboutA1', 'aboutA2', 'aboutA3', 'aboutA4'], "introB": ['aboutB1', 'aboutB2', 'aboutB3', 'aboutB4'],
解决方案
要生成预期的字典结构,需要在遍历文本行时识别intro开头的行作为键,将后续的非intro行收集为对应的值,直到遇到下一个intro行。调整后的代码如下:
result = {} current_key = None with open("mydata.txt", "r") as f: for line in f: cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行 # 识别新的键 if cleaned_line.startswith("intro"): current_key = cleaned_line result[current_key] = [] # 收集对应键的值 elif current_key is not None: result[current_key].append(cleaned_line) # 按预期格式输出 for key, values in result.items(): print(f'"{key}": {values},')
逻辑说明
- 初始化空字典
result和current_key变量,用于跟踪当前正在收集值的键。 - 逐行读取文件,先去除每行首尾空白,直接跳过空行。
- 遇到
intro开头的行时,将其设为当前键,并在字典中创建对应的空列表。 - 非
intro开头的行,若当前已有有效键,则添加到该键对应的列表中。 - 最后遍历字典,按要求的格式打印键值对。
内容的提问来源于stack exchange,提问作者DarCoy
相关产品推荐
相关产品推荐

