python小记--攻防世界Time_losing解题脚本编写

这篇博客介绍了如何使用Python处理文件时间戳,通过计算47个文件相对于给定源时间戳的差异,并将这些差异转换为ASCII码,最终组合成一个字符串。代码示例中展示了如何利用os库获取文件的修改时间,以及format函数的用法。

时间戳

对应攻防世界MISC题Time_losing

已知源时间戳为2000000000

定义一下 并且定义一个a来存储最终的flag

oldtime=2000000000
a=""

总共有47个文件 (0~46) 需要每个文件都和源时间戳进行相减

那么就要用到循环

先获取文件的路径(记得复制自己的文件路径 不要搬用我的)

给定参数时,路径前面有个字母“r”,为消除转义字符功能用
file= r"文件路径"
​
 file = r"C:\Users\12275\Desktop\stego\0.txt"

还需要用到一个format函数

format()函数介绍
它是通过引号中间包含花括号('{}')的形式通过点(.)format()形式进行函数调用
format()函数用来收集其后的位置参数和关键字段参数,并用他们的值填充字符串中的占位符。通常format()函数配合print()函数达到强格式化的输出能力,
​
format()函数固定的输出格式如下:
​
'{key : fill, align, sign,0,width, precision, type}'.format(para1...)
例子
​
通过关键字
​
print('{name}在{option}'.format(name="谢某人",option="写代码"))
​
结果:谢某人在写代码 
​
通过位置
1. 
​
print('name={} path={}'.format('zhangsan', '/')
​
结果:name=zhangsan path=/
​
2. 
​
print('{1}在{0}'.format('写代码','谢某人'))
​
3. 
​
TIDB 的 执行计划是: mysql> EXPLAIN SELECT -> id, flow_order_no, winning_losing, currency_type, bet_money, -> order_status, created_at, game_code, game_name, member_id, -> member_account, merchant_id, merchant_code, merchant_name, bet_at -> FROM -> anchor_bet_record -> FORCE INDEX (idx_optimized_query) -> WHERE -> merchant_code = '5273' -> AND member_account = 'xk139880305' -> AND game_code = 'bjl' -> AND created_at > '2025-09-28 09:32:32.953' -> AND is_deleted = 0 -> ORDER BY -> created_at ASC -> LIMIT 10; +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Projection_7 | 10.00 | root | | anchor_game.anchor_bet_record.id, anchor_game.anchor_bet_record.flow_order_no, anchor_game.anchor_bet_record.winning_losing, anchor_game.anchor_bet_record.currency_type, anchor_game.anchor_bet_record.bet_money, anchor_game.anchor_bet_record.order_status, anchor_game.anchor_bet_record.created_at, anchor_game.anchor_bet_record.game_code, anchor_game.anchor_bet_record.game_name, anchor_game.anchor_bet_record.member_id, anchor_game.anchor_bet_record.member_account, anchor_game.anchor_bet_record.merchant_id, anchor_game.anchor_bet_record.merchant_code, anchor_game.anchor_bet_record.merchant_name, anchor_game.anchor_bet_record.bet_at | | └─TopN_9 | 10.00 | root | | anchor_game.anchor_bet_record.created_at, offset:0, count:10 | | └─IndexLookUp_20 | 10.00 | root | | | | ├─IndexRangeScan_13(Build) | 473110.00 | cop[tikv] | table:anchor_bet_record, index:idx_merchant_bet(merchant_code, bet_at) | range:["5273","5273"], keep order:false | | └─TopN_19(Probe) | 10.00 | cop[tikv] | | anchor_game.anchor_bet_record.created_at, offset:0, count:10 | | └─Selection_15 | 910.05 | cop[tikv] | | eq(anchor_game.anchor_bet_record.game_code, "bjl"), eq(anchor_game.anchor_bet_record.is_deleted, 0), eq(anchor_game.anchor_bet_record.member_account, "xk139880305"), gt(anchor_game.anchor_bet_record.created_at, 2025-09-28 09:32:32.953000) | | └─TableRowIDScan_14 | 473110.00 | cop[tikv] | table:anchor_bet_record | keep order:false | +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.01 sec) mysql> mysql> mysql> //////////////////////////////////////////// ; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 1 near "////////////////////////////////////////////" mysql> mysql> EXPLAIN SELECT -> id, flow_order_no, winning_losing, currency_type, bet_money, -> order_status, created_at, game_code, game_name, member_id, -> member_account, merchant_id, merchant_code, merchant_name, bet_at -> FROM -> anchor_bet_record -> -> WHERE -> merchant_code = '5273' -> AND member_account = 'xk139880305' -> AND game_code = 'bjl' -> AND created_at > '2025-09-28 09:32:32.953' -> AND is_deleted = 0 -> ORDER BY -> created_at ASC -> LIMIT 10; +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | id | estRows | task | access object | operator info | +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Projection_7 | 10.00 | root | | anchor_game.anchor_bet_record.id, anchor_game.anchor_bet_record.flow_order_no, anchor_game.anchor_bet_record.winning_losing, anchor_game.anchor_bet_record.currency_type, anchor_game.anchor_bet_record.bet_money, anchor_game.anchor_bet_record.order_status, anchor_game.anchor_bet_record.created_at, anchor_game.anchor_bet_record.game_code, anchor_game.anchor_bet_record.game_name, anchor_game.anchor_bet_record.member_id, anchor_game.anchor_bet_record.member_account, anchor_game.anchor_bet_record.merchant_id, anchor_game.anchor_bet_record.merchant_code, anchor_game.anchor_bet_record.merchant_name, anchor_game.anchor_bet_record.bet_at | | └─TopN_9 | 10.00 | root | | anchor_game.anchor_bet_record.created_at, offset:0, count:10 | | └─IndexLookUp_20 | 10.00 | root | | | | ├─IndexRangeScan_13(Build) | 473110.00 | cop[tikv] | table:anchor_bet_record, index:idx_merchant_bet(merchant_code, bet_at) | range:["5273","5273"], keep order:false | | └─TopN_19(Probe) | 10.00 | cop[tikv] | | anchor_game.anchor_bet_record.created_at, offset:0, count:10 | | └─Selection_15 | 910.05 | cop[tikv] | | eq(anchor_game.anchor_bet_record.game_code, "bjl"), eq(anchor_game.anchor_bet_record.is_deleted, 0), eq(anchor_game.anchor_bet_record.member_account, "xk139880305"), gt(anchor_game.anchor_bet_record.created_at, 2025-09-28 09:32:32.953000) | | └─TableRowIDScan_14 | 473110.00 | cop[tikv] | table:anchor_bet_record | keep order:false | +------------------------------------+-----------+-----------+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.00 sec) mysql> 如何优化为最优的执行计划输出
10-01
要优化该查询的执行计划,可以从以下几个方面入手: ### 创建合适的索引 根据查询条件和排序条件,创建一个复合索引可以显著提高查询性能。在这个查询中,`merchant_code`、`member_account`、`game_code`、`created_at` 和 `is_deleted` 列都出现在 `WHERE` 子句中,并且 `created_at` 用于排序,因此可以创建如下复合索引: ```sql CREATE INDEX idx_search ON anchor_bet_record (merchant_code, member_account, game_code, is_deleted, created_at); ``` 复合索引的列顺序很重要,通常将选择性高的列放在前面,并且将用于排序的列放在最后。 ### 分析执行计划 使用 `EXPLAIN` 语句查看查询的执行计划,确保索引被正确使用: ```sql EXPLAIN SELECT id, flow_order_no, winning_losing, currency_type, bet_money, order_status, created_at, game_code, game_name, member_id, member_account, merchant_id, merchant_code, merchant_name, bet_at FROM anchor_bet_record WHERE merchant_code = '5273' AND member_account = 'xk139880305' AND game_code = 'bjl' AND created_at > '2025-09-28 09:32:32.953' AND is_deleted = 0 ORDER BY created_at ASC LIMIT 10; ``` 执行计划中的 `access object` 字段会显示是否使用了创建的索引。 ### 检查统计信息 确保表的统计信息是最新的,因为 TiDB 的查询优化器依赖统计信息来生成执行计划。可以使用以下语句更新统计信息: ```sql ANALYZE TABLE anchor_bet_record; ``` ### 避免全表扫描 如果执行计划中显示进行了全表扫描,说明索引没有被正确使用。检查索引是否存在,以及查询条件是否与索引列匹配。 ### 考虑覆盖索引 如果查询只需要索引列中的数据,可以创建覆盖索引,避免回表操作,进一步提高查询性能。例如: ```sql CREATE INDEX idx_covering ON anchor_bet_record (merchant_code, member_account, game_code, is_deleted, created_at, id, flow_order_no, winning_losing, currency_type, bet_money, order_status, game_name, member_id, merchant_id, merchant_name, bet_at); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tzyyyyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值