繁体   English   中英

如何将文件的每个部分写入单独的目录?

[英]How to write each part of a file in a seperate directory?

我有一个具有以下结构的文件(名称: state2 ):

timestep
  0.0000000      0.0000000      0.0000000
  0.0000000      0.0000000      1.2176673
timestep
 -0.0151405     -0.0000000     -0.0874954
 -0.0347223      0.0000001      1.2559323
timestep
 -0.0492274      0.0000001     -0.1238961
 -0.0976473     -0.0000002      1.2335932
.... (24 timesteps)

我试图将每个timestep (仅数字)放在目录中的一个单独文件中。 我编写了以下代码,但它只将第一个时间步数据写入文件。 如果我删除了break ,那么它会将整个原始文件再次写入单独的文件。

import os

steps = []
BaseDir=os.getcwd()
data=os.path.join(BaseDir, 'state2')
f= open(data, 'r')
all_lines = f.readlines()
for k in range(24):
    path = os.path.join(BaseDir, 'steps_{0:01d}'.format(k))
    os.mkdir(path)
    dest = os.path.join(BaseDir,'steps_{0:01d}'.format(k), 'step{0:01d}'.format(k))
    fout = open(dest, 'w')
    for i in range(0, len(all_lines)):
        if 'timestep' in all_lines[i]:
           fout.write('{0}{1}}'.format(all_lines[i+1], all_lines[i+2]))
           break

您不需要嵌套forifbreak恶作剧。 您需要做的就是:

  • 遍历原始文件中的行。
    1. 当您看到“timestep”时,打开一个新文件进行写入并移至下一行。
    2. 如果您没有看到“timestep”,请将该行写入当前文件并移至下一行。
fout = None
timestepnum = 0
for line in all_lines:
    if line == "timestep": # Or whatever condition you identify
        # this line says timestep, so we have now started looking at a new timestep (condition 1)
        if fout is not None:
           fout.close() # close the old timestep's file if it is already open
        
        timestepnum += 1

        # make the directory
        path = os.path.join(BaseDir, 'steps_{0:01d}'.format(timestepnum))
        os.mkdir(path)

        # open the file
        filename = os.path.join(BaseDir, f"steps_{timestepnum:01d}", f"step{timestepnum:01d}") # Code to specify file name
        fout = open(filename, 'w')

    elif fout is not None:
        # Condition 2 -- write this line as-is to the file.
        fout.write(line)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM