2020-11-11

1.山中若有眠,枕的是月。

2.四方食事,不过一碗人间烟火。 

3.我的灵魂清澈而明亮,宛若清晨的群山。 

4.鲸落海底,哺暗界众生十五年。 

5.心中贫瘠的早上,去看大海。

 6.十里寒塘路,烟花一半醒。 

7.吹灭读书灯,一身都是月。

 8.不知原谅什么,诚觉世事尽可原谅。 

9.欲买桂花同载酒,终不似、少年游。 

10.我曾踏月而来,只因你在山中。

11.唯有你的光辉,能像漫过山岭的薄雾。

12.世间情动,不过盛夏白瓷梅子汤,碎冰碰壁当啷响。 

13.花店不开了,花继续开。 

14.活在这珍贵的人间,太阳强烈,水波温柔。 

15.你一定要走,走到灯火通明。 

16.爱你就像爱生命。 

17.碧山人来,清酒深杯。 

18.山中何事?松花酿酒,春水煎茶。 

19.“雪融化会变成什么?” “是春天吧。

 20.既见君子,云胡不喜?

21.一生温暖纯良,不舍爱与自由。

22.今晚月色真美,风也温柔。 

23.草在结它的种子,风在摇它的叶子。我们站着,不说话,就十分美好。 

24.秋风吹渭水,落叶满长安。

 25.双木非林,田下有心。 

26.去想无关紧要的事。去想想风吧。

 27.下次你路过,人间已无我。 

28.我有一瓢酒,可以慰风尘。

 29.花看半开,酒饮微醺。

 30.雾失楼台,月迷津渡。

<think>我们需要修改之前的代码,因为现在要替换的是JSON格式的时间字段,而不是HTML表格中的时间。 假设我们处理的文件是JSON文件,但注意之前要求的是处理HTML文件,而这里的时间字段在JSON中。所以我们需要明确: 1. 文件类型:是HTML文件还是JSON文件?根据问题描述,之前是处理HTML文件,但现在要求替换的是JSON字符串,那么可能是处理包含这种JSON字符串的HTML文件,也可能是处理JSON文件。 2. 但是,问题中给出的标签是双引号括起来的,并且是JSON格式的键值对,所以很可能是文件内容中包含这样的JSON字符串。 然而,问题描述中要求处理的是host目录下所有文件格式为x.x.x.x.html的文件,所以这些文件是HTML文件,但其中可能包含JSON数据(比如在script标签内)?还是说这些HTML文件中内嵌了这样的JSON字符串? 但是,问题中给出的标签是: "timeStart": "2020-11-11 18:35:33", "timeEnd": "2020-11-11 18:41:22" 这看起来像是JSON对象的一部分。因此,我们需要在HTML文件中寻找这样的JSON字符串并替换。 但是,注意:在HTML文件中,这样的JSON字符串可能出现在<script>标签中,也可能在某个元素的属性中,或者直接内嵌在JavaScript代码中。然而,根据给出的键名(timeStart和timeEnd),这很可能是JavaScript代码中的一部分。 因此,我们修改正则表达式来匹配这种JSON格式的时间字符串。 但是,由于问题没有明确上下文,我们假设这些字符串出现在文件内容中的任意位置(但很可能是作为JavaScript变量的一部分)。为了安全替换,我们将精确匹配这两个键。 修改思路: - 来的正则表达式是针对HTML表格的,现在改为匹配JSON键值对。 - 替换的内容为:`"timeStart": "时间"` 和 `"timeEnd": "时间"`,我们要把时间替换为传入的时间。 注意:JSON字符串中的键名是固定的,所以我们可以直接匹配。 正则表达式设计: - 对于`timeStart`:`r'"timeStart":\s*".*?"'` 解释:匹配 `"timeStart":` 后面可能有空白(包括空格、制表符等),然后是一个双引号,中间是任意字符(非贪婪模式),直到下一个双引号。 - 对于`timeEnd`:同理,`r'"timeEnd":\s*".*?"'` 替换为: - `'"timeStart": "{start_time}"'` 和 `'"timeEnd": "{end_time}"'` 但是,注意:JSON字符串中可能包含转义字符,但时间字符串中一般不会有双引号,所以我们可以这样替换。 另外,我们还需要考虑JSON字符串可能跨行,所以使用`re.DOTALL`标志?但是,这里的时间字符串不会跨行(因为时间字符串本身不包含换行),所以我们可以不用`DOTALL`,但为了匹配可能存在的换行和空格,我们可以使用`\s*`来匹配空白字符(包括换行符)。 但是,我们匹配的时间字符串在双引号内,所以不会跨越多行(除非有换行在时间字符串中,但时间字符串通常不会换行)。所以我们可以安全使用。 修改后的函数: 由于我们之前是处理HTML文件,现在要替换的是JSON格式的字符串,所以我们将替换的正则表达式改为上述两个。 同时,我们仍然只处理文件名符合IP地址格式的HTML文件(即x.x.x.x.html)。 代码修改如下: 注意:我们仍然使用命令行参数传递开始时间和结束时间。 步骤: 1. 遍历指定目录下所有符合文件名格式的文件(x.x.x.x.html)。 2. 读取每个文件内容。 3. 使用正则表达式替换两个时间字段。 4. 写回文件。 代码:</think>以下是修改后的代码,用于替换HTML文件中JSON格式的时间字段 `"timeStart"` 和 `"timeEnd"`: ```python import os import re import argparse import sys def replace_json_time(directory, start_time, end_time): """ 替换指定目录下所有符合格式的HTML文件中的JSON时间信息 :param directory: 要处理的目录路径 :param start_time: 扫描起始时间 (格式: YYYY-MM-DD HH:MM:SS) :param end_time: 扫描结束时间 (格式: YYYY-MM-DD HH:MM:SS) """ # 验证目录是否存在 if not os.path.exists(directory): print(f"错误:目录 '{directory}' 不存在") sys.exit(1) # IP地址格式的HTML文件正则表达式 ip_file_pattern = re.compile(r'^\d{1,3}(\.\d{1,3}){3}\.html$') file_count = 0 # 遍历目录及其子目录 for root, _, files in os.walk(directory): for file in files: # 检查文件名是否符合IP地址格式 if ip_file_pattern.match(file): file_path = os.path.join(root, file) try: # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 替换JSON格式的扫描起始时间 # 匹配格式: "timeStart": "2020-11-11 18:35:33" content = re.sub( r'("timeStart":\s*")[^"]*(")', f'\\g<1>{start_time}\\g<2>', content ) # 替换JSON格式的扫描结束时间 # 匹配格式: "timeEnd": "2020-11-11 18:41:22" content = re.sub( r'("timeEnd":\s*")[^"]*(")', f'\\g<1>{end_time}\\g<2>', content ) # 写回文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(content) file_count += 1 print(f"已更新: {file_path}") except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}") print(f"\n处理完成! 共更新了 {file_count} 个文件") def validate_time_format(time_str): """验证时间字符串是否符合格式要求""" pattern = re.compile(r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$') if not pattern.match(time_str): raise ValueError(f"无效时间格式: {time_str}。要求格式: YYYY-MM-DD HH:MM:SS") if __name__ == "__main__": # 设置命令行参数解析 parser = argparse.ArgumentParser( description='更新HTML文件中JSON格式的时间信息', formatter_class=argparse.RawTextHelpFormatter ) parser.add_argument('-d', '--directory', required=True, help='包含HTML报告的目录路径') parser.add_argument('-r', '--start-time', required=True, help='扫描起始时间 (格式: YYYY-MM-DD HH:MM:SS)\n' '示例: "2023-06-15 14:30:00"') parser.add_argument('-f', '--end-time', required=True, help='扫描结束时间 (格式: YYYY-MM-DD HH:MM:SS)\n' '示例: "2023-06-15 18:45:00"') # 解析参数 args = parser.parse_args() try: # 验证时间格式 validate_time_format(args.start_time) validate_time_format(args.end_time) # 执行时间替换 replace_json_time( directory=args.directory, start_time=args.start_time, end_time=args.end_time ) except ValueError as e: print(f"参数错误: {str(e)}") sys.exit(1) ``` ### 代码解释: 1. **JSON时间字段替换逻辑**: - 使用正则表达式 `r'("timeStart":\s*")[^"]*(")'` 匹配JSON格式的时间字段 - `("timeStart":\s*")`:匹配键名和开头的引号 - `[^"]*`:匹配时间字符串(不含引号) - `(")`:匹配结尾的引号 - 保留键名和引号结构,只替换时间值 - 使用 `\\g<1>` 和 `\\g<2>` 引用捕获组 2. **正则表达式细节**: ```regex ("timeStart":\s*")[^"]*(") ``` - `\s*`:匹配0个或多个空白字符(空格、制表符等) - `[^"]*`:匹配除引号外的任意字符(确保不会匹配到下一个字段) - 示例匹配:`"timeStart": "2020-11-11 18:35:33"` 3. **时间格式验证**: - 使用 `validate_time_format` 函数确保输入时间格式正确 - 正则模式:`^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$` - 符合格式:`2023-06-15 14:30:00` ### 使用示例: ```bash # 替换JSON格式的时间字段 python script.py -d ./scan_reports -r "2023-08-01 09:00:00" -f "2023-08-01 12:30:00" ``` ### 替换前后对比: **始内容**: ```json { "scanInfo": { "timeStart": "2020-11-11 18:35:33", "timeEnd": "2020-11-11 18:41:22", "target": "192.168.1.1" } } ``` **替换后内容**: ```json { "scanInfo": { "timeStart": "2023-08-01 09:00:00", "timeEnd": "2023-08-01 12:30:00", "target": "192.168.1.1" } } ``` ### 处理多种JSON格式的灵活性: 1. **处理空白字符变化**: - 可以匹配:`"timeStart":"2020..."`(无空格) - 可以匹配:`"timeStart": "2020..."`(有空格) - 可以匹配:`"timeStart": "2020..."`(多个空格) 2. **处理引号位置**: - 确保只替换引号内的内容,不破坏JSON结构 - 正确处理字段值中的转义引号(如 `\"`) 3. **处理多行JSON**: - 正则表达式可以跨行匹配(默认`.`不匹配换行符,但`[^"]`可以匹配换行符) 此脚本专门用于处理包含JSON格式时间字段的HTML文件,确保精确替换而不破坏文件结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值