如何读取文件前N行,将每行"键","值"格式内容存储为Python字典且不使用JSON?
原代码核心问题
- 缩进不统一,with语句行和后续逻辑行的空格缩进不一致,运行时会直接触发缩进报错
- 读取文件得到的每一行自带末尾换行符,直接拆分后存储的键值会附带隐形换行,和预期内容不匹配
- 每行内容是带包裹双引号的格式,比如实际行内容为
"a b c", "3"\n,直接按逗号拆分得到的片段分别是"a b c"、"3"\n,没有去除首尾的引号、前导空格和换行残留,存入字典的键值全是带多余字符的无效内容 - 无限制拆分字符串,若键内容本身包含逗号,会直接抛出解包失败的错误
修正后的实现代码
def exam(): a_dictionary = {} with open("questions.txt", encoding="utf-8") as myfile: # 保持原逻辑读取前3行,提前剔除每行末尾的换行符 head = [next(myfile).rstrip("\n") for _ in range(3)] print(head) for line in head: # 仅按第一个逗号分割,避免内容内带逗号导致解包错误 raw_key, raw_value = line.split(",", maxsplit=1) # 去除首尾空格、包裹用的双引号,得到纯净的键与值 key = raw_key.strip().strip('"') value = raw_value.strip().strip('"') a_dictionary[key] = value print(a_dictionary) exam()
运行效果说明
修正后可正确处理全部3行内容,最终生成的字典完全符合要求:比如文件内3行内容分别为"a b c", "3"、"hello world", "10"、"test entry", "22",最终输出的字典结构为{"a b c": "3", "hello world": "10", "test entry": "22"}`,全程未使用JSON相关处理逻辑。
内容的提问来源于stack exchange,提问作者Zir0riZ
相关产品推荐
相关产品推荐

