RoadQAQ's picture
Upload folder using huggingface_hub
710b71f verified
import json
import os
from typing import Any
def save_to_json(data: Any, file_path: str, indent: int = 4) -> None:
"""
将数据保存到JSON文件中。
Args:
data (Any): 要保存的数据,通常是字典或列表。
file_path (str): 保存JSON文件的路径。
indent (int): 缩进级别,默认为4,用于格式化JSON文件。
Raises:
IOError: 当文件无法写入时抛出异常。
"""
try:
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=indent)
print(f"数据已成功保存到 {file_path}")
except IOError as e:
print(f"保存到文件 {file_path} 失败: {e}")
exit()
def load_from_json(file_path: str) -> Any:
"""
从JSON文件中读取数据。
Args:
file_path (str): 要读取的JSON文件路径。
Returns:
Any: 读取的JSON数据,通常是字典或列表。
Raises:
IOError: 当文件无法读取时抛出异常。
json.JSONDecodeError: 当JSON格式错误时抛出异常。
"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
print(f"数据已成功从 {file_path} 加载")
return data
except (IOError, json.JSONDecodeError) as e:
print(f"读取文件 {file_path} 失败: {e}")
exit()
def append_to_json(data: Any, file_path: str) -> None:
"""
向现有的JSON文件追加数据。如果文件不存在,则创建新文件。
Args:
data (Any): 要追加的数据。
file_path (str): JSON文件的路径。
Raises:
IOError: 当文件无法写入时抛出异常。
"""
existing_data = load_from_json(file_path) or []
if isinstance(existing_data, list):
existing_data.append(data)
else:
print(f"文件 {file_path} 的内容不是列表,无法追加数据。")
exit()
save_to_json(existing_data, file_path)
def is_json(file_path: str) -> bool:
"""
检查一个文件是否为有效的JSON文件。
Args:
file_path (str): 文件路径。
Returns:
bool: 如果文件是有效的JSON文件,返回True,否则返回False。
"""
if not os.path.exists(file_path):
return False
try:
with open(file_path, 'r', encoding='utf-8') as f:
json.load(f)
return True
except (IOError, json.JSONDecodeError):
return False
def pretty_print_json(data: Any) -> None:
"""
以漂亮格式打印JSON数据。
Args:
data (Any): 要打印的JSON数据,通常是字典或列表。
"""
print(json.dumps(data, ensure_ascii=False, indent=4))
def print_json_by_index(file_path: str, index: int) -> None:
"""
打印JSON文件中的第index条数据。
Args:
file_path (str): JSON文件的路径。
index (int): 要打印的条目索引,从0开始。
Raises:
IndexError: 如果索引超出列表范围,将抛出异常。
"""
data = load_from_json(file_path)
if data is None:
print("无法加载数据")
return
if not isinstance(data, list):
print("JSON文件的内容不是列表格式,无法按索引访问")
return
try:
item = data[index]
pretty_print_json(item)
except IndexError:
print(f"索引 {index} 超出范围。该JSON文件仅包含 {len(data)} 条数据。")