Python中存储含常见分隔符的字符串二维数组及JSON使用问题
新闻文章存储与检索方案解析
一、JSON序列化用法说明
你用json.dumps()的写法是完全正确的。JSON序列化后的字符串本身就会保留原数组的结构格式,比如你示例中的二维数组,序列化后会生成类似[["ID","URL","Title","Date","Article"],["1","2","3","4","5"]]的字符串,这是正常现象,并非用法错误。后续读取文件时,只需用json.load()就能将内容重新解析为Python的二维数组,完全不影响数据的还原。
二、高效检索的存储方案推荐
如果需要频繁按ID、标题等字段搜索,二维数组+JSON的方式效率偏低(每次搜索都要遍历整个数组),推荐以下两种更合适的方案:
1. 字典列表+JSON文件
将每篇文章改为字典结构,字段对应更清晰,搜索时可直接遍历列表匹配字段:
import json # 采用字典列表存储单篇文章 scraped_articles = [ {"ID": "1", "URL": "xxx", "Title": "新闻标题1", "Date": "2024-01-01", "Article": "文章内容..."}, {"ID": "2", "URL": "yyy", "Title": "新闻标题2", "Date": "2024-01-02", "Article": "文章内容..."} ] # 写入JSON文件,格式化输出便于查看 with open("articles.json", "w", encoding="utf-8") as f: json.dump(scraped_articles, f, ensure_ascii=False, indent=2) # 按ID搜索示例函数 def search_by_id(article_list, target_id): for article in article_list: if article["ID"] == target_id: return article return None # 读取文件后执行搜索 with open("articles.json", "r", encoding="utf-8") as f: articles = json.load(f) target_article = search_by_id(articles, "1")
2. SQLite轻量级数据库(优先推荐)
当文章数量达到数千篇时,文件存储的搜索效率会明显不足,建议使用Python自带的SQLite,通过SQL语句实现快速检索:
import sqlite3 # 连接数据库(文件不存在则自动创建) conn = sqlite3.connect("news_articles.db") cursor = conn.cursor() # 创建文章表结构 cursor.execute(''' CREATE TABLE IF NOT EXISTS articles ( ID TEXT PRIMARY KEY, URL TEXT, Title TEXT, Date TEXT, Article TEXT ) ''') # 插入单篇文章数据 article_data = ("1", "xxx", "新闻标题1", "2024-01-01", "文章内容...") cursor.execute("INSERT INTO articles VALUES (?, ?, ?, ?, ?)", article_data) conn.commit() # 按ID精准搜索 cursor.execute("SELECT * FROM articles WHERE ID = ?", ("1",)) result = cursor.fetchone() # 按标题模糊搜索 cursor.execute("SELECT * FROM articles WHERE Title LIKE ?", ("%关键词%",)) results = cursor.fetchall() # 关闭数据库连接 conn.close()
SQLite支持复杂的查询逻辑,检索速度远快于文件遍历,同时数据安全性更高,不会因单个文件损坏丢失全部数据。
内容的提问来源于stack exchange,提问作者hpbristol
相关产品推荐
相关产品推荐

