为同一扩展名的许多文件运行脚本。获取'UnboundLocalError'

时间:2016-02-17 15:51:15

标签: python glob

我正在尝试编写一个脚本来从扩展名为“.tp6”的目录中的许多文件中提取数据 - 最终我要将它们写入带有相关文件名的csv但我是现在没有专注于此。

下面的代码适用于~50个文件,然后突然得到一个“UnboundLocalError”,内容如下:

  

追踪(最近一次呼叫最后一次):

     
    

文件“finder5.py”,第22行,在模块

中          
      

uncovext(文件)

    
         

文件“finder5.py”,第17行,在uncovext中

         
      

print('%。3f'%outfloat)

    
  
     

UnboundLocalError:赋值前引用的局部变量'outfloat'。

以下是代码:

import Tkinter as tk
import tkFileDialog
import os
import glob

#defines the working directory
root = tk.Tk()
root.withdraw()
dir_path = tkFileDialog.askdirectory()
os.chdir(dir_path)

def uncovext(file1):
    for line in open(file1, 'r'):
        if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'):
            out = line[36:47]
            outfloat = (float(out) * 10000)
    print('%.3f' % outfloat)
    print(file)

#for each file with ext ".tp6"
for file in glob.glob("*.tp6"):
    uncovext(file)

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

问题是您有时处理的文件没有以UNCONVOLVED INTEGRATED RADIANCE开头的行。 outfloat变量永远不会被绑定,因此当uncovext中的for循环终止时,由于引用的变量不可用,因此print语句会失败。以下代码应显示如何解决问题。

import glob
import os
import Tkinter
import tkFileDialog


def main():
    root = Tkinter.Tk()
    root.withdraw()
    dir_path = tkFileDialog.askdirectory()
    os.chdir(dir_path)
    for file_path in glob.glob('*.tp6'):
        uncovext(file_path)


def uncovext(file_path):
    for line in open(file_path):
        if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'):
            text = line[36:47]
            number = float(text) * 10000
            print('%.3f' % number)
            print(file_path)


if __name__ == '__main__':
    main()