os.listdir没有列出目录中的文件

时间:2020-07-29 15:21:38

标签: python

出于某种原因,os.listdir对我不起作用。我在input_dir中有6个.xlsx文件,但是它创建了一个列表,里面没有任何内容,而不是显示6个文件的列表。如果我将.xlsx文件移到脚本的一个目录后,并更新input_dir路径,则它将找到所有6个文件,但我需要将这6个文件放在自己的文件夹中为一个目录。而且,当我将它们从一个目录上移到他们自己的文件夹中,并且更新了input_dir路径时,根本找不到它们。

import openpyxl as xl 
import os
import pandas as pd
import xlsxwriter

input_dir='C:\\Users\\work\\comparison'

files = [file for file in os.listdir(input_dir)
         if os.path.isfile(file) and file.endswith(".xlsx")]


for file in files: 
   input_file =  os.path.join(input_dir, file)
   wb1=xl.load_workbook(input_file)
   ws1=wb1.worksheets[0]

2 个答案:

答案 0 :(得分:0)

将文件移至input_dir时,以下行将创建一个空列表:

files = [file for file in os.listdir(input_dir)
         if os.path.isfile(file) and file.endswith(".xlsx")]

这是因为您正在检查os.path.isfile(file)而不是os.path.isfile(os.path.join(input_dir, file))

如果文件与脚本位于同一目录中,则可以找到文件并正确创建列表。

或者,您可以尝试使用glob.glob,它接受文件路径模式并在迭代器中返回文件的完整路径。

答案 1 :(得分:0)

问题来自os.path.isfile(file)os.listdir(input_dir)返回input_dir目录中的文件名列表,但没有路径。因此,您的错误,因为os.path.isfile(file)将查询您当前的目录,该目录显然没有任何这些文件名。

您可以通过简单地更改os.path.isfile(input_dir + '\\' + file)来轻松地更正此错误,但是更漂亮的解决方案是简单地删除部分代码(就像os.listdir返回此文件名一样,有必要将其添加到目录,无需检查):

files = [file for file in os.listdir(input_dir) if file.endswith(".xlsx")]