将函数应用于目录中的所有文件

时间:2014-06-25 08:19:37

标签: python matplotlib spyder

我编写了一个数据处理函数,需要将它应用于目录中的大量文件。

该功能适用​​于单个文件。

    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中编写。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

本着unix的精神你应该将程序分成两部分:

  1. 作用于给定文件的程序
  2. 将给定脚本应用于给定文件列表(glob或其他)的程序
  3. 所以这是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"