要列出的属性数组

2024-10-02 00:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用cclib解析输出文件中的一些数据。使用以下代码:

filename = "calc.out"
data = cclib.io.ccread(filename)
print (data.grads)

我得到以下输出:

[[[-1.6510e-04 -4.4360e-04 -3.0450e-04]
  [ 4.8228e-03  3.2300e-05  1.0200e-05]
  [-1.9796e-03 -3.5266e-03 -2.6463e-03]
  [-1.6856e-03  4.7508e-03 -1.7005e-03]
  [-1.8385e-03 -9.7510e-04  4.8117e-03]]]

我要做的是将输出转换为以下格式:

-1.6510e-04
-4.4360e-04
-3.0450e-04
.
.
.
4.8117e-03

我将如何使用python实现这一点?如果您需要任何其他信息,请让我知道,我不熟悉提问和python。提前感谢您的帮助


Tags: 文件数据代码io信息data格式calc
2条回答

因为您提供的输入对我来说是不可复制的,所以我将其稍微编辑为合法的python代码(而不是我没有的某个模块的字符串输出)

因为我不知道您的结果集的结构,并且您希望删除它以获得请求的输出,所以我将其展平为:
https://stackoverflow.com/a/48262212/1766544

(我稍微修改了上面的代码,因为字符串是可编辑的,但您希望字符串按原样返回,而不是逐个字符返回。)

您已经在注释中指出,这将生成包含多个数字的字符串。看起来它们只是空格分隔的,所以您需要使用str.split()https://docs.python.org/3.8/library/stdtypes.html?highlight=split#str.split

使用split()的第三步可能是您需要的唯一部分,但我必须完成其他步骤才能跟上进度,因为这个问题没有让我达到目的

data = [[['-1.6510e-04 -4.4360e-04 -3.0450e-04'],
         [' 4.8228e-03  3.2300e-05  1.0200e-05'],
         ['-1.9796e-03 -3.5266e-03 -2.6463e-03'],
         ['-1.6856e-03  4.7508e-03 -1.7005e-03'],
         ['-1.8385e-03 -9.7510e-04  4.8117e-03']]]

def flatten (data):
    for element in data:
        if isinstance(element, str):
            yield element
        else:
            try:
                yield from flatten(element)
            except TypeError:
                yield element

for item in flatten(data):
    for token in item.split():
        print (token)

要打印所需的输出,只需执行以下操作:

print(*(x for lst in data.grads for x in lst), sep='\n')

相关问题 更多 >

    热门问题