我编写了一个数据处理函数,需要将它应用于目录中的大量文件。
该功能适用于单个文件。
def getfwhm(x):
import numpy as np
st=np.std(x[:,7])
fwhm=2*np.sqrt(2*np.log(2))*st
file=open('all_fwhm2.txt', 'at')
file.write("fwhm = %.6f\n" % (fwhm))
file.close()
file=open('all_fwhm2.txt', 'rt')
print file.read()
file.close()
我现在想要更大规模地使用它。到目前为止,我已经编写了这段代码
import os
import fwhmfunction
files=os.listdir(".")
fwhmfunction.getfwhm(files)
但是我收到以下错误
File "fwhmfunction.py", line 11, in getfwhm
st=np.std(x[:,7])
TypeError: list indices must be integers, not tuple"
我使用spyder在python中编写。
感谢您的帮助!
答案 0 :(得分:0)
本着unix的精神你应该将程序分成两部分:
所以这是1的样本:
# name: script.py
import sys
File = sys.argv[1]
# do something here
print File
(最好使用argparse
来解析args,但我们使用argv
来保持简单)
关于第二部分,已经有一个优秀的unix工具:
$ find . -maxdepth 1 -mindepth 1 -name "*.txt" | parallel python2.7 script.py {}
在这里你获得额外的奖励:并行任务执行。
如果您在Windows上,那么您可以在python中编写一些简单的(顺序):
# name: apply_script_to_glob.py
import sys, os
from glob import glob
Script = sys.argv[1]
Glob = sys.argv[2]
Files = glob(Glob)
for File in Files:
os.system("python2.7 " + Script + " " + File)
(我们再次使用argparse
也没有检查任何内容以保持简单)。你用
$ python2.7 apply_script_to_glob.py "script.py" "*.txt"