python代码批量复制文件夹、变量命名文件夹,批量修改txt文本内容,批量依次执行指定路径下exe文件

需要一段python代码来解决如下问题,有没有人可以帮帮忙,十分感谢
已知条件:
1.一个存于D盘的名为”计算“文件夹,其中包含
input.txt
index.exe
tgs.exe
三个文件
2.变量I,存在的值有1 2 3 4;变量D,存在的值有100 200 300 400

需要代码完成的操作有:
1.批量复制文件夹“计算”到D盘目录下,并用变量I-D的形式重新命名,最终生成文件夹:计算1-100 计算1-200……计算4-300 计算4-400 共16个文件夹
2.修改上述16个文件夹下input.txt文件中的内容,具体为:修改第4行第4项(占11-12列)的原内容为D的30倍的结果,以及修改第10行的内容为(0.001*I×D/864)的结果(用科学计数法表示),其中I、D的值与其文件夹相互对应
3.依次运行16个文件夹中的index.exe文件,前一个运行完成后运行下一个,所有的均完成运行后,再以同样的方式依次运行tgs.exe

基于Monster 组和GPT的调写:

import os

# 定义变量I和D的取值列表
I_list = [1, 2, 3, 4]
D_list = [100, 200, 300, 400]

# 遍历I和D的取值组合,生成16个文件夹并复制文件
for I in I_list:
    for D in D_list:
        folder_name = f"计算{I}-{D}"
        os.makedirs(os.path.join("D:\\", folder_name))
        os.system(f"xcopy /E /I \"D:\\计算\" \"D:\\{folder_name}\"")
        
        # 修改input.txt文件内容
        input_file = os.path.join("D:\\", folder_name, "input.txt")
        with open(input_file, "r+") as f:
            lines = f.readlines()
            # 修改第4行第4项
            line4 = lines[3].split()
            line4[3] = str(D * 30)
            lines[3] = " ".join(line4) + "\n"
            # 修改第10行
            I_D = I * D
            line10 = f"{0.001 * I_D / 864:.2e}"
            lines[9] = line10 + "\n"
            # 写回文件
            f.seek(0)
            f.writelines(lines)
            f.truncate()
        
        # 运行index.exe文件
        index_file = os.path.join("D:\\", folder_name, "index.exe")
        os.system(index_file)

# 运行tgs.exe文件
for I in I_list:
    for D in D_list:
        folder_name = f"计算{I}-{D}"
        tgs_file = os.path.join("D:\\", folder_name, "tgs.exe")
        os.system(tgs_file)


注释:

  • os.makedirs函数用于创建文件夹,os.path.join函数用于连接文件夹路径和文件名。
  • os.system函数用于执行命令,这里使用xcopy命令复制文件夹。
  • with open语句用于打开文件,其中"r+"参数表示读写模式,readlines方法用于读取所有行,seek和truncate方法用于清空原文件内容并写入修改后的内容。
  • 字符串格式化语法f"{...}"用于生成文件夹名和文件内容,其中{...:.2e}表示科学计数法格式化,保留2位小数。
  • 运行可执行文件使用os.system函数,传入文件路径即可。

该回答引用chatgpt:

import os
import shutil

# 定义变量I和D的取值范围
I_values = [1, 2, 3, 4]
D_values = [100, 200, 300, 400]

# 批量复制文件夹
for I in I_values:
    for D in D_values:
        src_folder = 'D:/计算'
        dst_folder = f'D:/计算{I}-{D}'
        shutil.copytree(src_folder, dst_folder)

# 批量修改input.txt文件内容
for I in I_values:
    for D in D_values:
        folder_name = f'D:/计算{I}-{D}'
        input_file = os.path.join(folder_name, 'input.txt')
        with open(input_file, 'r') as f:
            lines = f.readlines()
        lines[3] = f'{D*30}\n'
        lines[9] = f'{0.001*I*D/864:.2e}\n'
        with open(input_file, 'w') as f:
            f.writelines(lines)

# 依次运行index.exe文件和tgs.exe文件
for I in I_values:
    for D in D_values:
        folder_name = f'D:/计算{I}-{D}'
        index_file = os.path.join(folder_name, 'index.exe')
        tgs_file = os.path.join(folder_name, 'tgs.exe')
        os.system(index_file)
        os.system(tgs_file)


引用chatGPT作答,以下是一个Python代码实现上述操作,包括文件夹复制、文件修改、运行程序的功能。

import os
import shutil

# 复制文件夹并重命名
for i in range(1, 5):
    for d in [100, 200, 300, 400]:
        src_folder = r'D:\计算'
        dst_folder = r'D:\计算{}-{}'.format(i, d)
        shutil.copytree(src_folder, dst_folder)

        # 修改input.txt文件
        file_path = os.path.join(dst_folder, 'input.txt')
        with open(file_path, 'r+') as f:
            lines = f.readlines()
            # 修改第4行第4项
            line4 = lines[3].split()
            line4[3] = str(d * 30)
            lines[3] = ' '.join(line4) + '\n'
            # 修改第10行
            line10 = '{:.2e}'.format(0.001 * i * d / 864)
            lines[9] = line10 + '\n'
            f.seek(0)
            f.writelines(lines)

        # 运行index.exe文件
        os.chdir(dst_folder)
        os.system('index.exe')

# 运行tgs.exe文件
for i in range(1, 5):
    for d in [100, 200, 300, 400]:
        dst_folder = r'D:\计算{}-{}'.format(i, d)
        os.chdir(dst_folder)
        os.system('tgs.exe')

该代码首先通过shutil.copytree()函数复制原始文件夹到新的目录,并使用字符串格式化操作将文件夹命名为计算i-d的形式。然后,它打开每个新文件夹中的input.txt文件,并修改第4行第4项和第10行的内容,根据文件夹的变量I和D计算出结果。最后,它使用os.system()函数运行index.exe和tgs.exe文件。循环通过变量i和d迭代所有16个文件夹,依次完成所有操作。