当撰写专业文章时,一个有效的方法是深入研究每个知识点,提供详细的解释和分析。以下是对您提供的代码的一些知识点的专业分析扩展:

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)