Я думаю, что filename.endswith('.xls.xlsx')
не будет работать так, как ожидается, следуя документации str.endswith , вы можете использовать tuple
(.endswith(('.xls','.xlsx'))
.) Для соответствия как .xls
, так и .xlsx
, кроме того, если вы работаете с обоими типами файлов, лучше знать исходное расширение и сопоставить этот суффикс во время операции переименования, поскольку они интерпретируются по-разному.
... информация [ ...] для форматов XLS и XLSX сильно различаются. XLS основан на BIFF (двоичном формате файла обмена), и поэтому информация напрямую сохраняется в двоичном формате. С другой стороны, XLSX основан на формате Office Open XML, формате файла, который был получен из XML ... [ 1 ]
Вы можете используйте _, extension = os.path.splitext(filename)
, чтобы получить только часть расширения, которая будет использоваться позже при операции переименования.
Чтобы удалить специальные символы и пробелы, вы можете использовать re.sub("[^a-zA-Z0-9]", "", nameCell)
. Если строка после :
может содержать only
специальные символы и пробелы, обязательно проверьте наличие пустой строки перед записью имени файла.
...
...
# Process the files at the path
for filename in os.listdir(filePath):
# get extension to use later on file rename
_, extension = os.path.splitext(filename)
if filename.endswith(('.xls','.xlsx')) and not filename.startswith('~'):
try:
workbook = openpyxl.load_workbook(filename)
worksheet = workbook.worksheets[0]
# get the text after the ":"
nameCell = re.search(":(.+)", worksheet[cellForFileName].value).group(1)
# or use str.split(":")[1], make sure the range exists
workbook.close()
if nameCell is not None:
# remove special characters and spaces
clearName = re.sub("[^a-zA-Z0-9]", "", nameCell)
newFileName = clearName + extension
shutil.move(filename, newFileName)
print('The file "' + filename + '" has been renamed to "'
+ newFileName + '".')
filesRenamed += 1
else:
print('The file "' + filename + '" could not be renamed.')
except PermissionError as e:
...
...
...