2015-05-07 3 views
1

У меня есть скрипт python, который анализирует дерево файлов и записывает его результаты в xlsx.Openpyxl - проблема с названием рабочей книги

Анализ идет хорошо, но когда я пытаюсь записать свои результаты, я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File ".\call_validation.py", line 103, in <module> 
    wb.save(wb_name) 
    File "C:\Python\lib\site-packages\openpyxl\workbook\workbook.py", line 298, i 
    save_workbook(self, filename) 
    File "C:\Python\lib\site-packages\openpyxl\writer\excel.py", line 196, in sav 
    writer.save(filename, as_template=as_template) 
    File "C:\Python\lib\site-packages\openpyxl\writer\excel.py", line 178, in sav 
    archive = ZipFile(filename, 'w', ZIP_DEFLATED) 
    File "C:\Python\lib\zipfile.py", line 923, in __init__ 
    self.fp = io.open(file, modeDict[mode]) 
OSError: [Errno 22] Invalid argument: 'move_generated-2015-05-07 10:08:26.xlsx' 

Я генерируя мое имя файла, используя datetime.datetime.now() так:

save_time = str(datetime.datetime.now()).split(".")[0] 
wb_name = "move_generated-" + save_time + ".xlsx" 
wb.save(wb_name) 

Я не» t верят, что имя файла слишком длинное, его только в C:\code\call_flow, и я попытался удалить все не буквенно-цифровые символы из имени. Есть идеи?

EDIT: Решение закончилось тем, что я не смог скрыть двоеточия от времени. Как сказал @nivix Zixer я установил его, заменив

save_time = str(datetime.datetime.now()).split(".")[0] 

с

save_time = str(datetime.datetime.now()).split(".")[0].replace(':', '_') 
+1

Возможно, проблема в том, что у вас есть место в имени файла? Попытайтесь заменить свою 'str (datetime.datetime.now()). Split (". ") [0]' с этим: 'str (datetime.datetime.now()). Split (". ") [0]. replace ('', '_') ' –

+0

Спасибо, это было то, что мне нужно. Если вы хотите опубликовать ответ, я соглашусь с ним. – Will

+2

Просто форматируйте 'datetime', используя' strftime' в следующий раз. Https: //docs.python.org/2/library/datetime.html –

ответ

2

Возможно, проблема у вас есть пробел в имени файла?

Заменить str(datetime.datetime.now()).split(".")[0] следующим образом: str(datetime.datetime.now()).split(".")[0].replace(' ', '_').

Рад, что я помогу Воли!

Смежные вопросы