如何在python中使用np.savetxt使文件名成为变量?

时间:2014-09-11 19:19:52

标签: python variables numpy

是否可以使用np.savetxt使输出文件名成为变量?我有多个输入文件,我将从中读取并执行一些计算并将结果输出到一个文件中。现在我每次都在为不同的输出更改文件名,但有没有办法自动完成?我使用的代码如下:

np.savetxt('ES-0.dat', np.c_[strain_percent, es_avg, es_std])

我想将文件名更改为ES-25.dat,ES 50.dat,ES-75.dat ....等。这也取决于我读到的输入文件:

flistC11 = glob.glob('ES-0')

还有办法自动将输入文件更改为ES-25,ES-50,ES-75等吗?

我尝试使用循环,但输入和输出都必须在''内部,这不允许我将其变为变量。不知道怎样才能解决这个问题?那时我的工作会轻松得多。

在Saullo Castro回答之后添加了信息:

我正在阅读的文件(ES *)包含两个简单的列,如下所示:

200 7.94
200 6.55
200 6.01
200 7.64
200 6.33
200 7.96
200 7.92

整个脚本如下:

import numpy as np
import glob
import sys


flistC11 = glob.glob('ES-s*')


#%strain

fdata4 = []
for fname in flistC11:
  load = np.loadtxt(fname)
fdata4.append(load[:,0]) #change to 0=strain or 1=%ES

fdata_arry4=np.array(fdata4)

print fdata_arry4

strain=np.mean(fdata_arry4[0,:])
strain_percent = strain/10

print strain_percent

#ES

fdata5 = []
for fname in flistC11:
  load = np.loadtxt(fname)
fdata5.append(load[:,1]) #change to 0=strain or 1=%ES

fdata_arry5=np.array(fdata5)

print fdata_arry5

es_avg=np.mean(fdata_arry5[0,:])
es_std=np.std(fdata_arry5[0,:])


print es_avg
print es_std

np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent,es_avg,es_std])

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

flistC11 = glob.glob('ES*')
for fname in flistC11:
    # ...something...
    np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent, es_avg, es_std])

请注意,使用ES*会告诉glob()返回所有使用ES开头的文件的名称。


编辑: 根据你的评论,你似乎真的想要这样的东西:

import glob

import numpy as np

flistC11 = glob.glob('ES-s*')
for fname in flistC11:
    strains, stresses = np.loadtxt(fname, unpack=True)
    strain = np.mean(strains)
    strain_percent = strain/10
    print fname, strain_percent
    es_avg = np.mean(stresses)
    es_std = np.std(stresses)
    print fname, es_avg, es_std
    np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent, es_avg, es_std])

答案 1 :(得分:1)

你的错误在哪里(第15行在哪里?)并不完全清楚,但我们假设它在加载中。

fdata4 = []
for fname in flistC11:
  load = np.loadtxt(fname)
fdata4.append(load[:,0]) #change to 0=strain or 1=%ES

我建议将其更改为:

fdata4 = []
for fname in flistC11:
  print fname  # check that the names make sense
  load = np.loadtxt(fname)
  print load.shape  # check that the shape is as expected
  # maybe print more of 'load' here
  # I assume you want to collect 'load' from all files, not just the last
  fdata4.append(load[:,0]) #change to 0=strain or 1=%ES
print fdata4

在Ipython shell中,我没有问题:

In [90]: flistC11=['ES0','ES1','ES2']
In [91]: for fname in flistC11:
    np.savetxt('{}.dat'.format(fname), np.arange(10))
   ....:     
In [92]: glob.glob('ES*')
Out[92]: ['ES2.dat', 'ES0.dat', 'ES1.dat']