【问题标题】:Using glob twice in a Python script在 Python 脚本中使用 glob 两次
【发布时间】:2015-01-28 23:15:33
【问题描述】:

我编写了一个 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
    

我只编程了几个月,所以这是我第一次不得不做一些如此奇特的事情。任何建议将不胜感激!

【问题讨论】:

  • 不清楚您要做什么。您可以根据需要多次使用glob.glob(),就像任何其他功能一样。请创建一个MCVE 以更好地说明您想要做什么。
  • @MattDMo 我没有时间创建 MCVE。我只需要知道是否可以在 for 循环中使用 glob.glob(),以及是否需要为每个 glob.glob() 定义一个单独的函数。这似乎是一个相当普遍的问题,不需要举例。
  • @Palmetto_Girl86:去做吧。如果它不起作用,那么您可以开始询问有关它为什么不起作用或如何使其起作用的问题。 StackOverflow 上的人通常不会有兴趣回答您可以通过运行代码自己回答的问题。
  • @BrenBarn 很高兴知道!我以后会记得 StackOverflow 对新手没有帮助。
  • 这很有帮助......在花时间写一个关于“它会工作”的问题之前,尝试运行代码会更快。

标签: python glob


【解决方案1】:

尝试回答您的问题

“我需要为每个 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') 

【讨论】:

  • 谢谢!这就是我一直在寻找的帮助。我开始明白为什么我的尝试是错误的。谢谢你提供方向。这正是我想要的!
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 2014-02-03
  • 2018-04-23
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多