如何用python处理json文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python处理json文件相关的知识,希望对你有一定的参考价值。
import json,timeinfos = "_id":"description","name":"python","filename":"中文","os":["abcd","hello","www"]
infos["time"] = time.time()#动态修改json文件内容
#生成json文件
def json_file(infos):
with open("./static/desc.desc","w") as jsonf:
jsonf.write(json.dumps(infos))
json_file(infos)
#读取json文件的内容
file_info = json.load(file("./static/desc.desc"))
print file_info,type(file_info)
filename = file_info["filename"]
print filename
infos = json.dumps(file_info,sort_keys=True,indent=4)
print infos,type(infos)
python使用json模块来处理json数据
如何用python查找和替换json文件中的特定字符串
【中文标题】如何用python查找和替换json文件中的特定字符串【英文标题】:How to find and replace a specific string in a json file with python 【发布时间】:2022-01-11 03:39:59 【问题描述】:使用python程序,我将一个ics文件保存到一个json文件中。json文件包含日历信息。我的目的是用不同的字符串(关键字)替换一些特定的字符串(小时)。基本上是 8:00 到 Meeting1 ; 9:00 到会议 2,以此类推。
Json 内容看起来像这样11/18/21 09:00 UTC-12/19/25 09:45 UTC Meeting-boss: - None
。这由 python 程序完成可能会很痛苦,所以我必须使用它。这是将 ics 文件解析为 json 文件的 python 程序:
from datetime import datetime, timedelta, timezone
import icalendar
from dateutil.rrule import *
f = open('myschool.json', 'w')
def parse_recurrences(recur_rule, start, exclusions):
""" Find all reoccuring events """
rules = rruleset()
first_rule = rrulestr(recur_rule, dtstart=start)
rules.rrule(first_rule)
if not isinstance(exclusions, list):
exclusions = [exclusions]
for xdate in exclusions:
try:
rules.exdate(xdate.dts[0].dt)
except AttributeError:
pass
now = datetime.now(timezone.utc)
this_year = now + timedelta(days=60)
dates = []
for rule in rules.between(now, this_year):
dates.append(rule.strftime("%D %H:%M UTC "))
return dates
icalfile = open('myschool.ics', 'rb')
gcal = icalendar.Calendar.from_ical(icalfile.read())
for component in gcal.walk():
if component.name == "VEVENT":
summary = component.get('summary')
description = component.get('description')
location = component.get('location')
startdt = component.get('dtstart').dt
enddt = component.get('dtend').dt
exdate = component.get('exdate')
if component.get('rrule'):
reoccur = component.get('rrule').to_ical().decode('utf-8')
for item in parse_recurrences(reoccur, startdt, exdate):
print("0 1: 2 - 3\n".format(item, summary, description, location), file = f)
else:
print("0-1 2: 3 - 4\n".format(startdt.strftime("%D %H:%M UTC"), enddt.strftime("%D %H:%M UTC"), summary, description, location), file = f)
icalfile.close()
我不知道该怎么做。如果它使事情变得更容易顺便说一句,json 可能是一个 txt 文件。 感谢所有帮助:)
【问题讨论】:
【参考方案1】:我想你可以使用"re"包(python正则表达式)来做,然后你可以使用replace方法将目标字符串替换为需要的字符串
您可以在此处https://docs.python.org/3/library/re.html
阅读有关 re 模块 的更多信息而且这个网站真的会帮你搜索JSON文件并找到目标字符串https://pythex.org/
【讨论】:
【参考方案2】:如果在当前 json 输出以及预期的 json 输出旁边没有示例 icalendar 组件,您的代码有点难以理解。如果我正确解释了您的代码,那么您似乎正在通过使用 component.get() 格式化从 icalendar 组件检索到的数据来构建 json。如果这是正确的,当您第一次从日历文件。然后,您可以按照当前的方式从字符串中组装 json,因为您想要进行的更改将在构建 json 文件之前完成。
例如:如果 startdt = component.get('dtstart').dt 包含从 icalendar 提取的对应于“11/18/21 09:00”的字符串,则可以使用正则表达式或字符串拆分之类的方法来删除“09:00”并添加“会议 2”。一旦变量 startdt 被修改为拥有你想要的数据,你的 json 就应该继承这些变化。
假设 startdt 包含为您的 json 提供日期和时间的字符串(例如:“11/18/21 09:00”),您可以使用以下代码将字符串更改为“11/18/21 Meeting 2” .
# import regex library
import re
# takes place of startdt = component.get('dtstart').dt in your code to make example easier.
startdt = "11/18/21 09:00"
# uses regex patter that looks for 2 digits, then ":" followed by 2 digits,
#then replaces the string that matches that pattern with "Meeting 2"
startdt = startdt.replace(re.search('\d2:\d2', startdt)[0], "Meeting 2")
print(startdt)
您没有指定如何在替换期间决定如何命名每个会议,但您可以将任何您想要的名称传递给 startdt.replace() 行,而不是示例中的硬编码“会议 2”。
【讨论】:
以上是关于如何用python处理json文件的主要内容,如果未能解决你的问题,请参考以下文章