无法显示几种文件类型

时间:2018-07-06 20:46:48

标签: python-3.x operating-system glob win32com

我已经对此问题进行了一段时间的研究和测试,似乎无法使其正常工作。

user_path

由用户提供,它包含.xlsm,.xlsb和.xlsx文件类型。我正在尝试捕获所有这些并将其转换为.csv。如果我替换扩展名,这将单独起作用:

all_files = glob.glob(os.path.join(user_path, "*.xlsm")) #xlsb, xlsm

我尝试了以下两种方法,两种方法都不起作用(win32com告诉我Excel无法访问out_folder。)

all_files = glob.glob(os.path.join(user_path, "*"))
all_files = glob.glob(user_path)

如何将这两种文件类型与user_path一起发送?

谢谢。

1 个答案:

答案 0 :(得分:1)

通过仅使用*glob匹配给定文件夹下的所有文件和目录,包括您无权访问的文件和目录,在您的情况下为out_folder目录,因此当您要遍历文件名,在尝试打开它们之前,请确保它们是否以所需的文件扩展名结尾。

由于glob一次无法测试多个文件扩展名,因此最好使用os.listdir并自行过滤多个文件扩展名。

for filename in os.listdir(user_path):
    if any(map(filename.endswith, ('.xlsm', '.xlsb', '.xlsx'))):
        do_something(filename)

或者,通过列表理解,

all_files = [filename for filename in os.listdir(user_path) if any(map(filename.endswith, ('.xlsm', '.xlsb', '.xlsx')))]

通过OP编辑(实际代码)

    pathlib.Path(path + '\out_folder').mkdir(parents = True, exist_ok = True)
    newpath = os.path.join(path,'out_folder')
#this is the line I can't seem to get to read both file types - it works as is.
    all_files_test = glob.glob(os.path.join(user_path, "*.xlsm")) #xlsb, xlsm

    for file in all_files_test:
        name1 = os.path.splitext(os.path.split(file)[1])[0]