python - 如何使用正则表达式替换 Python 中 dict 的内容
问题描述
我必须修改一个非常大的 JSON 文件(36MB),基本上我需要的是删除整个文件的时间戳。
由于应用程序崩溃,我无法使用 sublime text 或其他 IDE,我别无选择,只能使用 python 手动处理文件。
我想到的过程如下:
- 打开 JSON 文件
- 将 JSON 文件转换为 dict
- 删除字典中的时间戳
- 将 json 格式的 dict 导出到新文件中。
这是我的问题:
我需要编辑整个字典并将 TXX:XX:XX 替换为 ' ' (空字符)。JSON 文件必须采用 YYYY-MM-DD 格式。
所以假设我有这个日期:2021-11-02T00:04:03
替换时间戳后应该是这样的:2021-11-02
再举一个例子:
2021-10-02T01:04:03
应该2021-10-02
等等。
我知道这个正则表达式T00.{6}
适用于案例 00,但其他情况呢?01, 02, 03, 04 ... 等等。是否有适用于所有情况的通用正则表达式?
最重要的是,我如何在字典中查找所有值并将时间戳替换为""
.
解决方案
据我了解,问题是:
- 确定给定字符串是否为 形式
####-##-##T##:##:##
,其中 # 是任意数字; - 如果是这样,则截断字符串以仅包含 T 之前的部分;如果没有,请保持原样。
如果这是正确的,我们可以这样做:
def truncate_timestamp(potential_date_str):
pattern = '^([0-9]{4}-[0-9]{2}-[0-9]{2})T[0-9]{2}:[0-9]{2}:[0-9]{2}$'
match = re.search(pattern, potential_date_str)
if match:
return match.group(1)
else:
return potential_date_str
这会产生以下结果:
>>> truncate_timestamp('2021-11-02T00:04:03')
'2021-11-02'
>>> truncate_timestamp('Canned Frozen Orange Juice')
'Canned Frozen Orange Juice'
re.search
如果匹配成功,则返回真值,否则返回假值。这里给出的模式pattern
只是透明地编码了字符串由四个数字组成的事实,后跟一个破折号等,并且有一个用于日期部分的捕获组。如果我们成功匹配,我们将返回我们捕获的内容,这将是日期。如果不是,这不是时间戳,所以我们不理会它。
推荐阅读
- swiftui - swiftui Textfield 将光标移动到每次更改结束
- javascript - Bootstrap 切换按钮在移动屏幕上不起作用?
- hadoop - 我们如何在 hadoop 中为每个文件设置块大小?
- google-chrome-extension - Chrome 扩展:html 解析创建对象而不是源代码(清单 v3)
- sql - SQL Server LEAD 函数
- c++ - C++ 中的 @ 是什么以及为什么在 C++ 头文件中使用它?
- scala - Scala构造函数上的“发生在之前”:最终字段
- .net - 如何修复非共享成员需要对象引用错误?
- jquery - Ajax 响应未定义
- amazon-web-services - 如何通过其他区域的私有 VPC 终端节点访问 Amazon DynamoDB 服务?