出于某种原因,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]
答案 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")]