![](/img/trans.png)
[英]How to write each element of a list into a seperate field in a csv file?
[英]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
您不需要嵌套for
与if
和break
恶作剧。 您需要做的就是:
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.