尝试使用glob在Python中遍历文件夹中的文件

6

我只能从列表中的最后一个文件获取所需数据。虽然非常感谢程序的工作,但我更希望它可以处理文件夹中的所有文件。

   import os
   import glob
   os.chdir('C:\Users\U2970\Documents\Arcgis\Text_files\Data_exports')
   for file in list(glob.glob('*.txt')):
       reader = open(file)

   from EXPORT_COLUMN_SET import *

   try:
        data = column_set(reader)
        data.start_data_printer()
   finally:
        reader.close()

1
你为什么要做 list(glob(…))glob已经返回了一个列表。即使它返回了其他类型的可迭代对象,你为什么要在意它是不是一个列表呢? - abarnert
2个回答

9

for循环的范围定义了针对每个文件要执行的操作。for循环之后的所有内容仅执行一次:

 import os                                                                   
 import glob                                                                 
 os.chdir('C:\Users\U2970\Documents\Arcgis\Text_files\Data_exports')         
 for file in list(glob.glob('*.txt')):                                       
     reader = open(file)               # <-- Things done for each file

 # Things done only once:                      
 from EXPORT_COLUMN_SET import *                                             

 try:                                                                        
      data = column_set(reader)                                              
      data.start_data_printer()                                              
 finally:                                                                    
      reader.close()   

您可以缩进其余的代码,将其放在for循环内部:
 import os                                                                   
 import glob                                                                 
 os.chdir('C:\Users\U2970\Documents\Arcgis\Text_files\Data_exports')       
 for file in list(glob.glob('*.txt')):                           
     reader = open(file)                  # ^                 
                                          # |                
     from EXPORT_COLUMN_SET import *      # |              
                                          # | Things now done for each file
     try:                                 # |                                 
          data = column_set(reader)       # |                              
          data.start_data_printer()       # |                              
     finally:                             # |                              
          reader.close()                  # v

哎呀,我简直不敢相信我没看到那个,我太傻了。非常感谢!现在是周五下午…… - user3044431
1
不要使用list(glob.glob(…))(即构建一个列表进行迭代)而是使用glob.iglob(…):返回一个迭代器,从而避免创建列表。 - Jens

4
循环结束后,reader 将包含最后打开的文件,然后您可以处理该单个文件。
修复缩进。

一个缩进问题。是的,那似乎解决了问题。是啊,今天下午真爽。谢谢! - user3044431

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接