我正在尝试存储我在 Python 脚本中使用的大量新闻文章(最终可能超过几千篇)。为方便起见,我想将它们存储在文本文件中的二维数组中,例如 [[ID, Title, Article],[1, 'Bill's Burgers', 'The owner, Bill, makes good burgers."]]。然而,我在网上找到的解决方案需要一些字符,如逗号、空格、换行符等来分隔条目。由于这些通常出现在新闻文章中,我不能用它们来分隔元素。
我尝试使用 json 格式化我的二维数组,但发现这对我的数组没有任何作用。打印/打开 txt 文件时,它的显示与我声明时完全一样 - "[[[["ID", "URL", "Title", "Date", "Article"],["1","2 ","3","4","5"]]"。我的代码如下:
scraped_articles_array_headings = [["ID", "URL", "Title", "Date", "Article"],["1","2","3","4","5"]]
headings_encoded = json.dumps(scraped_articles_array_headings)
print(headings_encoded)
f = open("articles_encoded2.txt", "w", encoding="utf-8")
f.write(headings_encoded)
f.close()
我怎么在这里误用了 json?我欢迎任何有关存储此数据的合适方法的建议 - 理想情况下,我只希望系统能够轻松搜索每个参数(ID、标题等)的内容,我明白上述方法可能没有遵循明智的做法实现这一目标的途径。
我想你可能想查看一个示例 JSON 格式的文档。 请记住,这与 CSV 格式不同,CSV 格式基于行并使用您提到的分隔符。
要将这些值存储在 JSON 中,您可能需要执行以下操作:
[
{
"id": 1,
"url": "https://example.com",
"title": "Example Title",
"date": "21-03-2003",
"article": "Some article content..."
},
{
"id": 2,
"url": "https://example.com",
"title": "Example Title",
"date": "21-03-2003",
"article": "Some article content..."
}
]
为了存储大量数据,您可能需要考虑使用数据库来提高性能并允许查询(例如,从某个 URL 查找所有文章)。
您可以拥有包含“逗号、空格、换行符等”的文章,并且仍然使用将它们用作分隔符的常见格式。使用 Python
csv
模块的示例:
import csv
scraped_articles = [['ID', 'URL', 'Title', 'Date', 'Article'],
['1','2','3','4','article1 with\n "quotes" and commas(,) and newlines'],
['1','2','3','4','article2 with\n "quotes" and commas(,) and newlines']]
with open('articles.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(scraped_articles)
with open('articles.csv', 'r', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
print('-'*80)
print(line['Article'])
print('-'*80)
结果
articles.csv
:
ID,URL,Title,Date,Article
1,2,3,4,"article1 with
""quotes"" and commas(,) and newlines"
1,2,3,4,"article2 with
""quotes"" and commas(,) and newlines"
读回数据后的输出:
--------------------------------------------------------------------------------
article1 with
"quotes" and commas(,) and newlines
--------------------------------------------------------------------------------
article2 with
"quotes" and commas(,) and newlines
--------------------------------------------------------------------------------