如何转换多个相同扩展名的文件?

How to convert multiple files of the same extension?

我正在使用此代码将“.xls”文件转换为“.xlsx”。我成功地为 1 个文件做了这件事。但是我想把它放在一个循环中,这样我就可以一次转换多个文件。

这些文件有不同的名字,所以我越来越难做到这一点。这是我的代码:

import win32com.client as win32
fname = "C:\Users\Desktop\test\a.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)

wb.SaveAs(fname+"x", FileFormat = 51)    #FileFormat = 51 is for .xlsx extension
wb.Close()                               #FileFormat = 56 is for .xls extension
excel.Application.Quit()

非常感谢任何帮助。谢谢你。 Edit-1:由@Ayush 实施第一个解决方案,观察到以下错误:

Traceback (most recent call last):
  File "C:\Users\Desktop\convert2.py", line 7, in <module>
    wb = excel.Workbooks.Open(file)
  File "C:\Users\AppData\Local\Temp\gen_py.9[=11=]020813-0000-0000-C000-000000000046x0x1x9\Workbooks.py", line 75, in Open
    ret = self._oleobj_.InvokeTypes(1923, LCID, 1, (13, 0), ((8, 1), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17)),Filename
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "Sorry, we couldn't find a.xls. Is it possible it was moved, renamed or deleted?", 'xlmain11.chm', 0, -2146827284), None)

您可以使用os模块获取指定文件夹中的文件列表并循环遍历它们。试试这个,让我知道它是否有效。

import win32com.client as win32
import os
path = "C:\Users\Desktop\test"
dir_list = os.listdir(path)
for file in dir_list:
    file_with_path = os.path.join(path, file)
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    wb = excel.Workbooks.Open(file_with_path)

    wb.SaveAs(file_with_path+"x", FileFormat = 51)    #FileFormat = 51 is for .xlsx extension
    wb.Close()                               #FileFormat = 56 is for .xls extension
    excel.Application.Quit()

编辑:

注意:如果您也想编辑这些 excel 文件,请使用上面的代码,否则如果您只想重命名文件,请使用下面的代码

import os
path = "C:\Users\Desktop\test"
for file in os.listdir(path):
    file_with_path = os.path.join(path, file)
    os.rename(file_with_path, file_with_path + 'x')

注意:上面的代码可以再次稍微改进,但是你必须确保下面的脚本与 excel 文件位于同一目录中

import os
[os.rename(file, file + 'x') for file in os.listdir('.')]

我可以通过查看其他一些答案来解决它,这是代码:

import os
import os.path
import win32com.client as win32
rootdir = u'"C:\Users\Desktop\test"'
for parent, dirnames, filenames in os.walk(rootdir):
    for fn in filenames:
        filedir = os.path.join(parent, fn)
        print(filedir)
 
        excel = win32.gencache.EnsureDispatch('Excel.Application')
        wb = excel.Workbooks.Open(filedir)
        # xlsx: FileFormat=51
        # xls:  FileFormat=56,
        wb.SaveAs(filedir+"x", FileFormat = 51) 
        wb.Close()                                 
        excel.Application.Quit()