为了避免我的CSL再次崩溃导致存档丢失,一怒之下写了一个自动备份脚本,每次游戏挂在后台即可。启动时会自动使用上次最后的备份覆盖掉本地的配置和存档,然后每隔600s备份一次(推荐备份主文件夹而非单独的存档文件夹),每隔1小时上传至对象存储。需要修改的东西:Windows用户名、对象存储的设置、备份的路径,至于打包和配置文件,下次再写吧,又不是不能用(已经手生到快忘记基础语法的地步了,许久不用导致能力大幅下降XD

import time, os, shutil
from qcloud_cos import CosConfig, CosS3Client
source_path = "C:\\Users\\PC用户名\\AppData\Local\\Colossal Order"
backup_path = "C:\\Users\\PC用户名\\Desktop\\Backup"
class cos:
secret_id = 'SecretId' # 替换为用户的 SecretId,请登录访问管理控制台进行查看和管理,https://console.cloud.tencent.com/cam/capi
secret_key = 'SecretKey' # 替换为用户的 SecretKey,请登录访问管理控制台进行查看和管理,https://console.cloud.tencent.com/cam/capi
region = 'ap-beijing' # 替换为用户的 region,已创建桶归属的region可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket
# COS支持的所有region列表参见https://www.qcloud.com/document/product/436/6224
token = None # 如果使用永久密钥不需要填入token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见https://cloud.tencent.com/document/product/436/14048
domain = None
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Domain=domain) # 获取配置对象
client = CosS3Client(config)
def recover_save():
file_list = os.listdir(backup_path)
backup_file = file_list[-1]
shutil.unpack_archive(backup_file, source_path)
def compress_save():
local_time = time.strftime("%Y%m%d-%H%M", time.localtime(time.time()))
archive_name = "Save-Backup-" + local_time
archive_file = shutil.make_archive(archive_name, 'zip', source_path)
shutil.copy2(archive_file, backup_path)
return archive_name
def upload_cos():
file_list = os.listdir(backup_path)
backup_file = file_list[-1]
with open(backup_file, 'rb') as fp:
response = cos.client.put_object(
Bucket='test04-123456789', # Bucket由bucketname-appid组成
Body=fp,
Key=backup_file,
StorageClass='STANDARD',
ContentType='text/html; charset=utf-8'
)
return response['ETag']
if __name__ == "__main__":
try:
recover_log = recover_save()
print(f"[INFO]成功恢复存档: {recover_log}")
except Exception as e:
print(f"[ERROR]{e}")
v = 0
while True:
try:
archive_name = compress_save()
print(f"[INFO]成功备份存档: {archive_name}")
except Exception as e:
print(f"[ERROR]{e}")
time.sleep(600)
v += 1
if v == 6:
try:
upload_log = upload_cos()
print(f"[INFO]成功上传存档:{upload_cos}")
except Exception as e:
print(f"[ERROR]{e}")
v = 0

2025年5月18日更新:**游戏,毁我青春害我前途,我再玩我是狗