在python scrip中解析输入文件

2024-10-03 15:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个bash脚本:

  1. 在工作目录中的某些dcd文件上循环
  2. 创建一个python脚本,该脚本对这些文件和
  3. 为每个文件保存一些结果
for dcd in ${workdir}/*.dcd; do
dcd_name2="$(basename "$dcd")"
dcd_name="${dcd_name2/.dcd/}"
# print a python script
printf " # 1-load dcd file
dcd = parseDCD('${dcd}')
# 2- do something with the dcd file
dcd.superpose() lala
# 3- Plotting results

import matplotlib.pyplot as plt

plt.figure(figsize=(9,8))
showFractVars(md_ensemble) 
plt.savefig( 'results_${dcd_name}.png' ) > ./my_python_script.py
python ./my_python_script.py
done

现在我需要修改我的算法,以循环方式加载一个脚本中的所有DCD文件,例如,对于10个DCD文件,python脚本应该如下所示

dcd1 = parseDCD('${dcd1}')
dcd2 = parseDCD('${dcd2}')
dcd3 = parseDCD('${dcd3}')
# 2- do something with the dcd file
dcd1.superpose() lala
dcd2.superpose() lala
dcd3.superpose() lala
# 3- Plotting results

import matplotlib.pyplot as plt

plt.figure(figsize=(9,8))
showFractVars(dcd1, dcd2,dcd3) 
plt.savefig( 'results_${dcd_name}.png' )

如何修改我的第一个bash脚本中的“for循环”来完成这个任务?你知道吗


Tags: 文件name脚本scriptpltdoresultsfile
1条回答
网友
1楼 · 发布于 2024-10-03 15:31:10

我认为bash脚本是不需要的。你知道吗

我的建议是,您应该使用globpython模块,编写一个python脚本,完成给定工作目录的所有逻辑

下面是我编写的一个示例脚本,这可能是处理此问题的最佳方法:

# Imports
import argparse
import os
from glob import glob

# Third party imports
import matplotlib.pyplot as plt

# Constants
RESULT_NAME_TEPLATE = 'results_{file_name}.png'

def parse_dcd():

    # Your logic...
    pass

def handle_dcd_file(file_name):
    dcd = parse_dcd('${dcd}')

    # 2- do something with the dcd file
    dcd.superpose() 
    # 3- Plotting results

    plt.figure(figsize=(9,8))
    showFractVars(md_ensemble)
    plt.savefig(RESULT_NAME_TEPLATE.format(file_name=file_name))    

def main(input_directory):

    dcd_files = glob(os.path.join(input_directory, '*.dcd'))

    for file_name in dcd_files:
        print "Handling {file_name}".format(file_name=file_name)
        handle_dcd_file(file_name)

    print "Finished handling {} dcd files from '{}'".format(len(dcd_files), os.path.abspath(input_directory))


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Your program description")
    parser.add_argument('input_directory', nargs='?', default='.')
    args = parser.parse_args()

    if not os.path.isdir(args.input_directory):
        parser.error("The input directory at '{}' does not exist!".format(args.input_directory))
    main(args.input_directory)

用法示例: 脚本接受可选的input_directory命令行参数。如果未提供任何目录,则假定当前目录为:

当前目录 python dcd_parser.py

给定一个目录 python dcd_parser.py /home/user/example/dir

相关问题 更多 >