我已经对此问题进行了一段时间的研究和测试,似乎无法使其正常工作。
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一起发送?
谢谢。
答案 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]