Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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 在目录中搜索多个Excel文件类型_Python_Excel_Python 2.7 - Fatal编程技术网

Python 在目录中搜索多个Excel文件类型

Python 在目录中搜索多个Excel文件类型,python,excel,python-2.7,Python,Excel,Python 2.7,我正在尝试创建一个脚本,该脚本将在单个目录中搜索excel文件。脚本将在文件名中搜索子字符串,然后将包含该子字符串的文件名记录到新的excel文件中 我是Python新手,我的编程技能还不到标准,所以我在这里寻找一个起点 这里有一些代码,我已经找到并试图修改,但它似乎不适合我 以下是回溯: 回溯(最近一次呼叫最后一次): 文件“C:\Python27\lib\py\U compile.py”,第106行,在compile中打开(文件“U”)作为f: IOError:[Errno 22]无效的模式

我正在尝试创建一个脚本,该脚本将在单个目录中搜索excel文件。脚本将在文件名中搜索子字符串,然后将包含该子字符串的文件名记录到新的excel文件中

我是Python新手,我的编程技能还不到标准,所以我在这里寻找一个起点

这里有一些代码,我已经找到并试图修改,但它似乎不适合我

以下是回溯:

回溯(最近一次呼叫最后一次):

文件“C:\Python27\lib\py\U compile.py”,第106行,在compile中打开(文件“U”)作为f:

IOError:[Errno 22]无效的模式('U')或文件名:“”

编辑 下面是我在考虑了这些建议后得出的结论。它仍然不起作用,我也不知道为什么(因此被称为“supernoob”)

回溯(最近一次呼叫最后一次):

文件“C:\Python27\lib\py\u compile.py”,第106行,在compile中 打开(文件“U”)作为f:

IOError:[Errno 22]无效的模式('U')或文件名:“”


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

单个反斜杠是转义字符(用于编码特殊字符,如新行
\n
或制表符
\t
)。当您希望python打印反斜杠时,我们需要使用双反斜杠。
C:\\Test
这应该可以解决此错误

其他可能的错误:

  • 您如何定义
    start\u dir
  • start\u dir
    不应使用os.getenv定义。当前,
    os.getenv
    在os.environ字典中查找
    C:\Test
    ,该字典将诸如
    HOME
    Users
    等环境变量的名称映射到它们的值(在本例中,是主目录或用户名)。您应该检查这是否返回了您期望的结果,但我怀疑不是。我只是将startdir的目录定义为一个字符串,
    startdir='C:\Test

    我会将
    start\u dir
    置于功能范围内。我的建议是执行
    def excelfiles(pattern,startdir='C:\Test'):
    这样,在调用函数时可以选择提供不同的目录,但如果不这样做,函数将使用默认值
    C:\Test

  • 在for循环中解压缩由
    os.walk()
    返回的元组:
  • 在循环的每个过程中,
    os.walk
    将返回一个包含三个值的元组: 找到的目录的名称、当前目录中的子目录列表以及当前目录中的文件列表。要解压缩包含3个值的元组,for循环中需要3个变量。os.walk(start\u dir)中root文件的当前for循环
    仅包含两个值。对于os.walk(start\u dir)中的root、subdir和文件,您需要将其更改为

    建议:

    为了简化代码,我建议查看str.endswith的文档。str.endswith可以接受一个元组,如果str在元组中有一个后缀,则返回true。在您的情况下,
    filename.endswith(“.xls”)或filename.endswith(“.xlsx”)或filename.endswith(“.xlsx”):
    可以简化为
    filename.endswith((“.xls”、“.xlsm”、“.xlsx”)


    编辑:我为IOError提供了反斜杠解决方案。

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

    单个反斜杠是转义字符(用于编码特殊字符,如新行
    \n
    或制表符
    \t
    )。当您希望python打印反斜杠时,我们需要使用双反斜杠。
    C:\\Test
    这应该可以解决此错误

    其他可能的错误:

  • 您如何定义
    start\u dir
  • start\u dir
    不应使用os.getenv定义。当前,
    os.getenv
    在os.environ字典中查找
    C:\Test
    ,该字典将诸如
    HOME
    Users
    等环境变量的名称映射到它们的值(在本例中,是主目录或用户名)。您应该检查这是否返回了您期望的结果,但我怀疑不是。我只是将startdir的目录定义为一个字符串,
    startdir='C:\Test

    我会将
    start\u dir
    置于功能范围内。我的建议是执行
    def excelfiles(pattern,startdir='C:\Test'):
    这样,在调用函数时可以选择提供不同的目录,但如果不这样做,函数将使用默认值
    C:\Test

  • 在for循环中解压缩由
    os.walk()
    返回的元组:
  • 在循环的每个过程中,
    os.walk
    将返回一个包含三个值的元组: 找到的目录的名称、当前目录中的子目录列表以及当前目录中的文件列表。要解压缩包含3个值的元组,for循环中需要3个变量。os.walk(start\u dir)中root文件的当前for循环
    仅包含两个值。对于os.walk(start\u dir)中的root、subdir和文件,您需要将其更改为

    建议:

    为了简化代码,我建议查看str.endswith的文档。str.endswith可以接受一个元组,如果str在元组中有一个后缀,则返回true。在您的情况下,
    filename.endswith(“.xls”)或filename.endswith(“.xlsx”)或filename.endswith(“.xlsx”):
    可以简化为
    filename.endswith((“.xls”、“.xlsm”、“.xlsx”)


    编辑:我为IOError提供了反斜杠解决方案。

    define“似乎不适合我”抱歉,它会引发多个错误。“缺少模块文档字符串”“从外部范围重新定义”“文件列表”“无效”
        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
    
        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