在目录中search多个Excel文件types

我试图创build一个脚本,将search单个目录中的Excel文件。 该脚本将search文件名中的子string,然后将包含该子string的文件的名称logging到新的excel文件中。

我是Python的新手,我的编程技能仍然不够好,所以我正在寻找一个起点。

以下是我find并尝试修改的一些代码,但它似乎不适用于我。

这是回溯:

回溯(最近一次通话最后):

在文件“C:\ Python27 \ lib \ py_compile.py”中,第106行用open(file,'U')作为f:

IOError:[Errno 22] invalid mode('U')or filename:''

import os, fnmatch start_dir = os.getenv('C:\Test') def excelfiles(pattern): file_list = [] for root, files in os.walk(start_dir): for filename in files: if fnmatch.fnmatch(filename.lower(), pattern): if filename.endswith(".xls") or filename.endswith(".xlsx") or filename.endswith(".xlsm"): file_list.append(os.path.join(root, filename)) return file_list file_list = excelfiles('*SP*') for i in file_list: print i 

编辑所以这是我考虑了这些build议后想出来的。 它仍然不起作用,我不知道为什么(因此“超级”)。

  import os, fnmatch def excelfiles(pattern, start_dir = 'C:\Test'): file_list = [] for root, subdir, files in os.walk(start_dir): for filename in files: if fnmatch.fnmatch(filename.lower(), pattern): if filename.endswith(".xls", ".xlsx", ".xlsm"): file_list.append(os.path.join(root, filename)) return file_list file_list = excelfiles('*SP*') for i in file_list: print i 

回溯(最近一次通话最后):

在文件“C:\ Python27 \ lib \ py_compile.py”中,第106行用open(file,'U')作为f:

IOError:[Errno 22] invalid mode('U')or filename:''

您当前的错误是IOError:[Errno 22]无效模式('U')或文件名

一个反斜杠是一个转义字符(用于编码特殊字符,如新行\n或制表符\t )。 当你想Python打印反斜杠,我们需要使用双反斜杠。 C:\\Test这应该解决这个错误。

其他可能的错误:

  1. 你如何定义start_dir

start_dir不应该使用os.getenv来定义。 目前, os.getenv在os.environ字典中查找C:\Test ,它将诸如HOMEUsers类的环境variables等名称映射到它们的值(本例中为主目录或用户名)。 你应该检查这是否回报你所期望的,但我怀疑它不是。 我只是将startdir的目录定义为一个string, startdir = 'C:\Test

我将在函数的范围内带入start_dir 。 我的build议是def excelfiles(pattern, startdir = 'C:\Test'):这样你可以select在调用函数时提供不同的目录,但是如果你不这样做,函数将会使用默认值是C:\Test

  1. 解压os.walk()在for循环中返回的元组:

在循环的每一个循环中, os.walk将返回一个三元组的元组:它find的目录的名称,当前目录中的子目录列表以及当前目录中的文件列表。 要解压3个值的元组,在for循环中需要3个variables。 你目前的for root, files in os.walk(start_dir): for循环for root, files in os.walk(start_dir):只能容纳两个值。 你需要把它改为for root, subdir, files in os.walk(start_dir):

一条build议:

为了简化你的代码,我build议看一下str.endswith的文档。 str.endswith可以接受一个元组,如果str在元组中有一个足够的元素,将返回true。 在你的情况下, filename.endswith(".xls") or filename.endswith(".xlsx") or filename.endswith(".xlsm"):可以简化为filename.endswith((".xls", ".xlsm", ".xlsx"))

编辑:我提供了IOError的反斜杠解决scheme。