我有一个我编写的Python脚本,用于绘制来自两个不同文件的数据。我有几对文件需要运行这个脚本。 (取“几对”意味着可能数千个。)在一个类似的脚本中绘制来自单个文件的数据,我使用了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
我只编程了几个月,所以这是我第一次做这种奇特的事情。任何建议将不胜感激!
答案 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')