json处理
当撰写专业文章时,一个有效的方法是深入研究每个知识点,提供详细的解释和分析。以下是对您提供的代码的一些知识点的专业分析扩展:
1. JSON 数据处理
在处理 JSON 数据时,我们使用 Python 的 json
模块来加载和保存数据。这个模块提供了 load
和 dump
函数,分别用于读取和写入 JSON 数据。值得注意的是,json
模块允许我们指定文件编码(例如,'utf-8'),确保在读取和写入时正确处理 Unicode 字符。
2. 日期处理
日期处理是关键的编程任务之一。在这个代码示例中,我们使用 datetime
模块来解析和比较日期。通过将日期字符串转换为 datetime
对象,我们可以轻松地执行日期的各种比较和运算。
3. 数据过滤与删除
在本代码中,数据过滤的目标是保留提交日期在过去 13 天内的数据。通过遍历数据并使用列表推导式,我们可以轻松地创建一个新的数据列表,其中仅包含符合条件的数据。这种方式允许我们有效地管理数据的流程,并确保我们处理的是最新的和符合条件的数据。
4. 数据比较
在删除数据时,代码使用 if deleted_entry not in filtered_data
进行比较。然而,这可能导致性能问题,因为列表中的每个元素都将进行线性搜索。更有效的方法是使用集合(set
)进行比较,或者直接比较特定的属性,以确保准确匹配。
5. 打印信息
打印信息是调试和代码理解的关键组成部分。在这里,我们使用 print
语句打印出被删除数据的详细信息,包括姓名、application_id
和提交日期。这有助于开发人员在代码运行时了解数据处理的细节。
6. 文件操作
最后,我们使用 with
语句打开文件,这确保在代码块执行完毕后文件被正确关闭。同时,我们使用 indent
参数来确保保存的 JSON 数据具有良好的可读性。
#encoding:utf-8
import json
from datetime import datetime, timedelta
def filter_and_save_data(days, json_file_path):
# 从 JSON 文件加载数据
with open(json_file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
# 保留 sub_time 日期超过指定天数的数据
filtered_data = [entry for entry in data if 'sub_time' in entry and (datetime.now() - datetime.strptime(entry['sub_time'], "%Y-%m-%d %H:%M:%S") <= timedelta(days=days))]
# 打印被删除的数据
for deleted_entry in data:
if deleted_entry not in filtered_data:
print(f"已删除的数据: 姓名: {deleted_entry['zh_name']}, application_id: {deleted_entry['application_id']}, 提交日期: {deleted_entry.get('sub_time', '无')}\n")
# 将过滤后的数据保存回 JSON 文件
with open(json_file_path, 'w', encoding='utf-8') as file:
json.dump(filtered_data, file, indent=2)
# 使用示例
filter_and_save_data(20, r'F:\win11\name.json')
扩展:txt处理
from datetime import datetime
def read_data_from_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
data_content = file.read()
return eval(data_content)
def calculate_days_difference(date_str):
date_format = "%Y-%m-%d %H:%M:%S"
sub_time = datetime.strptime(date_str, date_format)
current_time = datetime.now()
difference = current_time - sub_time
return difference.days
def filter_and_print_deleted_info(data_list, file_path, days_threshold=10):
filtered_data = [item for item in data_list if calculate_days_difference(item['sub_time']) <= days_threshold]
deleted_info = [(item['zh_name'], item['application_id'], item['sub_time']) for item in data_list if item not in filtered_data]
for info in deleted_info:
print(f"已删除: zh_name={info[0]}, application_id={info[1]}, sub_time={info[2]}")
with open(file_path, 'w', encoding='utf-8') as file:
data_content = file.write(str(filtered_data))
# 文件路径
file_path = r'F:\win11\data.txt'
# 从文件读取数据
data_list = read_data_from_file(file_path)
# 过滤和打印已删除的信息
filter_and_print_deleted_info(data_list, file_path, days_threshold=12)
本文作者: 永生
本文链接: https://www.yys.zone/detail/?id=321
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)