Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python脚本中使用glob两次_Python_Glob - Fatal编程技术网

在Python脚本中使用glob两次

在Python脚本中使用glob两次,python,glob,Python,Glob,我编写了一个Python脚本,用于绘制来自两个不同文件的数据。我有几对文件需要在上面运行这个脚本。(假设“几对”可能意味着数千对)在一个类似的脚本中,我使用了glob.glob并获得了巨大成功。在这种情况下,我想做一些类似的事情 我的问题有两个方面: 是否需要为每个glob.glob定义单独的函数 我是否可以将第二个glob.glob嵌套在我在单个数据文件案例中使用的for循环中,如图所示 def process_file(my_file): (# The body of my code...

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

我的问题有两个方面:

  • 是否需要为每个glob.glob定义单独的函数
  • 我是否可以将第二个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
    

  • 我只做了几个月的编程,所以这是我第一次不得不做这么异国情调的事情。任何建议都将不胜感激

    尝试回答您的问题

    “是否需要为每个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') 
    
    但在这种情况下,内部的球体是没有意义的。。。我们已经在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') 
    

    现在还不清楚你想做什么。与任何其他函数一样,您可以使用
    glob.glob()
    任意次数。请创建一个MCVE来更好地说明您想要做什么。@MattDMo我没有时间创建MCVE。我只需要知道是否可以在for循环中使用glob.glob(),以及是否需要为每个glob.glob()定义单独的函数。这似乎是一个相当普遍的问题,而不是一个需要举例说明的问题。@Palmetto_Girl86:就这么做吧。如果它不起作用,那么你可以开始问一些问题,比如为什么它不起作用,或者如何使它起作用。StackOverflow上的人通常不会对回答问题感兴趣,你可以通过运行代码自己回答问题。@BrenBarn很高兴知道!我将来会记得StackOverflow对新来者没有帮助。。。在花时间写一个关于“它会工作吗”的问题之前,试着运行代码会快得多。谢谢!这就是我一直在寻求的帮助。我开始明白为什么我尝试的是错误的。谢谢你提供指导。这正是我要找的!