python - 在 python 脚本中解析输入文件
问题描述
我写了一个 bash 脚本:
- 循环工作目录中的一些 dcd 文件
- 创建一个 python 脚本,对这些文件进行后处理并
- 为每个文件保存一些结果
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 循环”以完成此任务?
解决方案
我认为不需要 bash 脚本。
我的建议是您应该使用glob
python 模块并编写一个 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
推荐阅读
- bash - 仅使用 sed/BASH 将扩展的 IPv6 转换为 PTR 的反向半字节 arpa
- excel - 使用 VBA 在工作簿之间循环和粘贴
- azure - 替换 Docker 映像中的数据库连接字符串
- visual-studio-code - VS Code 有没有办法导入 Makefile 项目?
- r - 使用 Plotly 图表向 Shiny 应用程序添加自定义标题
- jquery - 几秒钟后,如何使用 jquery 在选择时刷新页面...?
- android - 由于内存不足,gradle 无法构建 android 项目
- ios - arm64 iOS Swift Gstreamer 库 (Xcode 10.1) 不支持 rtspsrc
- cloud-foundry - Spring Cloud 数据流服务器 Cloud Foundry 配置服务器
- javascript - 可以在快递中使用中继吗?