优化方法

This commit is contained in:
halliday 2025-11-18 18:55:06 +08:00
parent c9605ad3b5
commit d2c505fd07
1 changed files with 74 additions and 68 deletions

View File

@ -1,74 +1,80 @@
#encoding=utf-8
import shutil import shutil
import sys import sys
import os from pathlib import Path
""" class FileCopier:
69-477326 :: 版本: 1 :: 文件内部处理频繁切换防止溢出测试 def __init__(self):
self.path = Path.cwd()
使用方法 self.file_path = self.path / 'file.txt'
1.先用WriteFile 2.0.exe 工具生成一个 test.txt self.dir_list = list(range(1, 61))
2.和这个脚本放在一个目录中
3.执行脚本 def init_dir(self):
python copy_files.py args """初始化目录"""
args: for dir_num in self.dir_list:
init # 初始化目录会创建60个目录,有的会先删除 dir_path = self.path / str(dir_num)
clean # 清楚创建的目录 if dir_path.exists():
js # 生成 test_1.txttest_3.txt ...,并依次放入上述目录中 shutil.rmtree(dir_path)
os # 生成 test_2.txttest_4.txt ...,并依次放入上述目录中 dir_path.mkdir()
""" print("目录初始化完成")
# 定义公共的部分 def _copy_files(self, file_list):
path = os.getcwd() """复制文件到目录中"""
file_path = os.path.join(path, 'test.txt') if not self.file_path.exists():
dir_list = list(range(1, 61)) raise FileNotFoundError(f"源文件 {self.file_path} 不存在")
# 复制奇数 file_dir_map = dict(zip(file_list, self.dir_list))
def jishu(): success_count = 0
file_list = list(range(121))[1::2]
fd = dict(zip(file_list, dir_list)) for file_num, dir_num in file_dir_map.items():
copy_file(fd) new_name = f'file_{file_num}.txt'
target_path = self.path / str(dir_num) / new_name
# 复制偶数 try:
def oushu(): shutil.copyfile(self.file_path, target_path)
file_list = list(range(121))[2::2] success_count += 1
fd = dict(zip(file_list, dir_list)) except Exception as e:
copy_file(fd) print(f"复制文件 {file_num} 到目录 {dir_num} 失败: {e}")
# 复制文件到目录中 print(f"成功复制 {success_count} 个文件")
def copy_file(fd):
for file, dir in fd.items(): def copy_odd(self):
newname = 'test_' + str(file) + '.txt' """复制奇数文件"""
todir = os.path.join(path, str(dir), newname) file_list = list(range(1, 121, 2))
shutil.copyfile(file_path, todir) print(f"开始复制 {len(file_list)} 个奇数文件...")
self._copy_files(file_list)
# 初始化目录
def init_dir(): def copy_even(self):
for dir in dir_list: """复制偶数文件"""
dir_path = os.path.join(path, str(dir)) file_list = list(range(2, 121, 2))
if os.path.exists(dir_path): print(f"开始复制 {len(file_list)} 个偶数文件...")
shutil.rmtree(dir_path) self._copy_files(file_list)
os.mkdir(dir_path)
def clean():
for dir in dir_list:
dir_path = os.path.join(path, str(dir))
if os.path.exists(dir_path):
shutil.rmtree(dir_path)
def main():
"""主函数"""
if len(sys.argv) != 2:
print("用法: python copy_files.py [init|js|os]")
print(" init - 初始化目录")
print(" js - 复制奇数文件")
print(" os - 复制偶数文件")
sys.exit(1)
command = sys.argv[1].lower()
copier = FileCopier()
try:
if command == 'init':
copier.init_dir()
elif command == 'js':
copier.copy_odd()
elif command == 'os':
copier.copy_even()
else:
print(f"错误: 未知命令 '{command}'")
print("请使用 init, js 或 os")
sys.exit(1)
except Exception as e:
print(f"执行失败: {e}")
sys.exit(1)
if __name__ == '__main__': if __name__ == '__main__':
# 定义传参 main()
if len(sys.argv) != 2:
assert False, 'not get args'
if sys.argv[1] not in ["js", "os", "init","clean"]:
assert False, 'args is error,please input js or os '
if sys.argv[1] == 'init':
init_dir()
elif sys.argv[1] == 'js':
jishu()
elif sys.argv[1] == 'os':
oushu()
elif sys.argv[1] == 'clean':
clean()