我正在尝试使用Python从Slurm输出文件中提取一些值,但是write()
方法似乎无法按预期工作(或者我不太了解它的用法)。 / p>
Link以下载输出文件slurm-5089.out
:
仅提取值并将它们放在两个单独的文件中是成功的:
for line in f:
if line[:2] == "nu":
nuof.write(line[5:])
if line[:2] == "C ":
Cof.write(line[4:])
但是当我尝试将值(每个类别/文件的150个)划分为子类别(nu-SVC或C-SVC,每个类别的30个值)时,请在属于特定值的每组值之前子类别,它没有给出预期的结果,这是我用来这样做的最后一段代码:
for line in f:
if line[:4] == "**Tr":
if i in nu:
print(i)
print(type[i])
nuof.write(type[i]+'\n')
print(line)
i += 1
if i in C:
print(i)
print(type[i])
Cof.write(type[i]+'\n')
print(line)
i += 1
对于我打开的文件,列表nu
,C
,type
和我使用的计数器i
,这是它们的初始化:
from __future__ import print_function
i = 0
nu = [0,1,2,3,4]
C = [5,6,7,8]
type = ['-----nu-SVC-----', '-----nu-SVC-----', '-----nu-SVC-----', '-----nu-SVC-----', '-----nu-SVC-----', '-----C-SVC-----', '-----C-SVC-----', '-----C-SVC-----', '-----C-SVC-----']
Cof = open('C_values', 'w')
nuof = open('nu_values', 'w')
f = open('slurm-5089.out', 'r')
这是我在-----def-----
文件中添加第一个C_values
的方式:
Cof.write('-----def-----\n')
Link下载我在C_values
文件中得到的输出。
Link下载我在nu_values
文件中得到的输出。
这是我打算获得的:
-----def-----
1.067648
1.699384
1.137877
2.148189
327.390817
2.668285
1.015005
1.834085
1.085050
2.512783
330.863862
2.492146
1.016106
1.741183
0.905885
2.451512
477.157341
2.679206
1.118905
1.952953
1.071948
2.459619
400.765942
2.798353
0.783165
1.990212
0.877010
2.093311
331.349704
2.671817
-----C-SVC-----
0.121222
0.196481
0.126245
0.350959
9036.687632
0.459966
0.111442
0.213469
0.128784
0.430376
8188.026398
0.436184
0.118351
0.201235
0.108417
0.400938
10286.065268
0.433921
0.129255
0.226374
0.126481
0.482451
13273.184496
0.525713
0.097013
0.236698
0.105254
0.344640
6230.513754
0.458801
-----C-SVC-----
16.107007
21.039873
16.553491
30.173238
1674.267295
35.782899
15.238036
20.423749
16.830935
31.339246
1698.550375
31.147013
16.274621
20.223880
16.434865
31.521544
2353.794493
36.805332
16.764180
23.052520
17.781023
31.867347
2182.786987
32.875505
13.401091
23.094557
14.890684
25.336002
1653.916156
34.239836
-----C-SVC-----
1.067648
1.699384
1.137877
2.148189
327.390817
2.668285
1.015005
1.834085
1.085050
2.512783
330.863862
2.492146
1.016106
1.741183
0.905885
2.451512
477.157341
2.679206
1.118905
1.952953
1.071948
2.459619
400.765942
2.798353
0.783165
1.990212
0.877010
2.093311
331.349704
2.671817
-----C-SVC-----
2.319126
3.974477
2.463397
7.358145
130.813731
9.923179
2.175899
4.486890
2.503507
9.056446
129.852183
9.817307
2.256106
4.008876
2.078878
8.397495
113.754769
9.262230
2.685915
4.782272
2.459403
11.044663
120.761463
10.852858
1.885747
4.804282
1.992187
8.006820
118.607456
10.239223
C_values
文件中的某些部分实际上井井有条,将值分为准确的期望数(每个子类别30个值),它们是值的最后2组,并从{{1 }},直到第一个-----def-----
为止,共有90个值代表3个子类别;在此示例中(仅用于-----C-SVC-----
),应将值分成5个部分,即文件中有多少个[titles]分隔符,这证明计数实际上执行得很好,但是我不太清楚了解循环如何处理输出文件中的后两个C_values
以及90值组,我尝试编写不同的代码段,但是它们都不起作用,并且所提供的代码与我得到的结果相近我想拥有它,这是我内置的-----C-SVC-----
方法带来的帮助吗?还是我在这里缺少了什么?
答案 0 :(得分:0)
我走了另一条路,它给出了我想要的结果,我尝试编写
nu
值和C
值到nu_values
和C_values
文件中,并且同时计数器(变量i
)达到一定数量(变量count
,在这种情况下为30
),算法将从type[]
列表中写入选定的消息(在我的上一个代码中,由于{{1 }}编辑器将其突出显示为python关键字),然后将tp[]
分配给vim
以重新开始,这样的问题是即使它提供了非凡的性能(一个大小为245 MB的文件)是因为它在函数内部调用了函数,并且读取了输入文件(0
)来对以i
或sys.argv[1]
开头的行进行计数,然后然后,它开始编写过程(因此,是种重复相同的过程),但是无论如何,这是我的解决方案:
nu