我正在编写一个包含以下目标的Python脚本:
file_name
movie1.dat !name of a general file the binary reads
nbr_box ! line3-8 is general info
2
this_box
1
lrdf_bead
.true.
beadid1
C1 !this is the line I must change
beadid2
F4 !This is a second line I must change
lrdf_com
.false.
bin_width
0.04
rcut
7
继续,直到我点击包含二进制文件的文件夹);返回2.直到我的特定目标完成,然后代码很顺利。我不得不在很大程度上依赖Python的OS模块来完成目录工作。但是,我从未有过任何经验a)使用python对文件进行微调,以及b)运行可执行文件。你能不能给我一些关于Python模块的想法,把我引导到类似的堆栈源等,或者给出一些可以实现的方法?我知道这是一个模糊的问题,所以请问你是否不明白我在问什么,我会详细说明。此外,我必须对此fort.4文件所做的更改本质上是重复的;它们都发生在文件中的相同位置。
干杯
EDIT :: 整个fort.4文件:
[HttpPost]
public ActionResult Save(string tempName)
{
return Json(tempName);
}
所以,我需要改变" C1"到" C2"例如。这些变化非常微不足道,但我必须强调主要的fortran可执行文件读取此fort.4以及我已经创建的这个movie1.dat文件这一事实。希望这有帮助
答案 0 :(得分:0)
好的,这里有一些重要的事情,首先我们需要能够管理我们的cwd,因为我们将使用os模块
import os
每当方法对文件夹进行操作时,将目录更改为文件夹并返回父文件夹非常重要。这也可以通过os模块实现。
def operateOnFolder(folder):
os.chdir(folder)
...
os.chdir("..")
现在我们需要为每个目录做一些方法,包括这个,
for k in os.listdir(".") if os.path.isdir(k):
operateOnFolder(k)
最后,为了对一些预先存在的FORTRAN文件进行操作,我们可以使用内置文件操作符。
fileSource = open("someFile.f","r")
fileText = fileSource.read()
fileSource.close()
fileLines = fileText.split("\n")
# change a line in the file with -> fileLines[42] = "the 42nd line"
fileText = "\n".join(fileLines)
fileOutput = open("someFile.f","w")
fileOutput.write(fileText)
您可以从output.fx
::
source.f90
subprocess.call(["gfortran","-o","output.fx","source.f90"])#create
subprocess.call(["output.fx"]) #execute