在数据处理和存储过程中,文本文件与 JSON 格式是两种常见的数据表示方式。文本文件因其简单易读而广泛使用,而 JSON 格式则因其结构化和与编程语言的良好兼容性而受到青睐。因此,将文本文件转换为 JSON 格式的一项重要技术任务,在许多场景中都有其应用价值。
接下来,我将介绍如何实现一个 Python 函数,将文本文件的内容转换为 JSON 格式。此函数将兼容多行题目、多个选项和无序号选项。
1. 准备工作
首先,我们需要明确文本文件的格式。假设我们的文本文件内容如下所示:
问题 1: Python 是哪种类型的语言?
A. 编译型
B. 解释型
C. 复合型
D. 脚本型
问题 2: Python 的主要应用领域有哪些?
- 数据分析
- web 开发
- 人工智能
- 自动化脚本
在这个例子中,问题以“问题 x:”开头,选项可以是带编号的(如 A、B、C、D),或是无序的(类似 - 的格式)。
2. 编写转换函数
下面是一个 Python 函数 convert_text_to_json
,它可以将上述文本格式转换为 JSON 格式:
import json
def convert_text_to_json(file_path):
"""
将文本文件转换为 JSON 格式
:param file_path: 文本文件的路径
:return: 转换后的 JSON 数据
"""
result = {}
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
current_question = None
for line in lines:
line = line.strip() # 去除行首尾空白字符
# 检测问题行
if line.startswith('问题'):
if current_question is not None:
result[current_question['title']] = current_question['options']
# 创建新的问题字典
current_question = {
'title': line,
'options': []
}
# 检测选项行
elif line.startswith(('A.', 'B.', 'C.', 'D.')) or line.startswith('-'):
option = line.split('. ')[-1] if '.' in line else line[1:].strip()
current_question['options'].append(option)
# 将最后一个问题添加到结果中
if current_question is not None:
result[current_question['title']] = current_question['options']
# 转换为 JSON 格式
return json.dumps(result, ensure_ascii=False, indent=2)
# 调用函数并打印结果
json_data = convert_text_to_json('questions.txt')
print(json_data)
3. 代码分析
在这个示例中,我定义了一个函数 convert_text_to_json
,它接受一个文本文件的路径,并读取文件的内容。函数内部使用了一个字典 result
来存储最终的结果。
- 读取文件:使用
with open(file_path, 'r', encoding='utf-8') as file:
来打开并读取文本文件。 - 处理每一行:
- 如果当前行以“问题”开头,表示找到一个新问题,重置
current_question
。 - 识别选项行,可以是带编号或者无序项,并将选项添加到当前问题的选项列表中。
- 转换为 JSON:利用
json.dumps
方法将结果转换为 JSON 格式,并确保中文字符正常显示。
4. 结束语
通过上述步骤,我们可以轻松地将具有特定格式的文本文件转换为结构化的 JSON 数据。这种转换在数据存储、解析以及在不同系统之间的数据交互等方面都具有重要意义。希望这篇文章能为你提供一些实用的思路和代码示例,以便在以后的开发中使用这一技术。