在Python脚本中使用glob两次

时间:2014-12-01 00:33:10

标签: python glob

我有一个我编写的Python脚本,用于绘制来自两个不同文件的数据。我有几对文件需要运行这个脚本。 (取“几对”意味着可能数千个。)在一个类似的脚本中绘制来自单个文件的数据,我使用了glob.glob并取得了巨大的成功。在这种情况下,我想做类似的事情。

我的问题是双重的:

  1. 我是否需要为每个glob.glob定义一个单独的函数?
  2. 我可以将第二个glob.glob嵌套在我在单数据文件中使用的for循环中,如图所示吗?

    def process_file(my_file):
    
    (# The body of my code... not relevant, and not something I can share.
    
    if __name__=='__main__':
        import glob
        for f in glob.glob(file_directory + "*_data.dat"):
            process_file(f)
            print f
    
  3. 我只编程了几个月,所以这是我第一次做这种奇特的事情。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:2)

尝试回答您的问题

  

“我是否需要为每个glob.glob定义一个单独的函数?”

这取决于 - 您是否需要对两种类型的文件执行相同的操作?在这种情况下,只需使用相同的功能。否则,如果操作完全不同,您应该有两个不同的功能。

如果操作大部分相同,你可以有一个函数,但是参数说明你传递的是什么类型的文件,例如:

def process_file(file_path, file_type):
    # mostly the same stuff
    ...
    if file_type == 'a':
        # something different
  

“我可以将第二个glob.glob嵌套在我在单数据文件中使用的for循环中,如图所示吗?”

你可以做到。假设文件对的文件名有些相关,你可以使用类似的东西:

for f_a in glob.glob(file_directory + "*_data_a.dat"):
    process_file(f_a, 'a')
    for f_b in glob.glob(file_directory + f_a[:-11] + "_data_b.dat"):
        # we only ever expect to find one item to loop over here though
        process_file(f_b, 'b') 

但在这种情况下,内部glob是没有意义的......我们在python代码中构造了整个文件名,可以这样做:

for f_a in glob.glob(file_directory + "*_data_a.dat"):
    process_file(f_a, file_type='a')
    process_file(file_directory + f_a[:-11] + "_data_b.dat", file_type='b') 

嗯,严格来说内部的glob确实做了比上面更多的事情,它告诉你第二个文件存在。所以我们可以通过这样做来恢复这种行为:

import os

for f_a in glob.glob(file_directory + "*_data_a.dat"):
    process_file(f_a, file_type='a')
    f_b = file_directory + f_a[:-11] + "_data_b.dat"
    if os.path.isfile(f_b):
        process_file(f_b, file_type='b')