2015-07-11 19 views
1

在OS X上,openpyxl.save()對於名爲'all_done.xslx'的文件正常工作。即使將'r'作爲文件名前綴,openpyxl無法在Windows上保存

然而,它試圖在Windows上的時候,它會導致:

c:\Users\Tony\Desktop\ROI>python roi_cut6.py > log.txt 
Traceback (most recent call last): 
File "roi_cut6.py", line 373, in <module> 
main() 
File "roi_cut6.py", line 369, in main 
processSource(wb, 'Gemini', totalGeminiSpends, geminiRevenues) 
File "roi_cut6.py", line 269, in processSource 
wb.save(r'all_done.xlsx') 
File "C:\Python27\lib\site-packages\openpyxl\workbook\workbook.py", line 298, 
in save 
save_workbook(self, filename) 
File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 198, in sa 
ve_workbook 
writer.save(filename, as_template=as_template) 
File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 180, in sa 
ve 
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True) 
File "C:\Python27\lib\zipfile.py", line 756, in __init__ 
self.fp = open(file, modeDict[mode]) 
IOError: [Errno 22] invalid mode ('wb') or filename: 'all_done.xlsx' 

This後和this後建議的文件名前添加r。這我已經嘗試過了(正如在上面的日誌中可以看到的那樣)。該文件位於當前目錄中,所以它不是反斜槓或正斜槓的問題。該文件可以在OS X和Windows上的Excel中打開。還有什麼可能是這個問題?不幸的是,我自己無法訪問Windows mahcine,因此無法直接在那裏進行故障排除。

保存到的文件最初是直接在Excel中創建的,還是與openpyxl

+0

不確定。這當然不是我的腳本直接使用的,但我可以在openpyxl.excel.py中看到它被openpyxl嚴重使用。 – Pyderman

+0

是的,沒有路徑,因爲文件和腳本在同一個目錄中。 'wb.save(r'all_done.xlsx')' – Pyderman

+0

Windows機器上的'openpyxl'版本多大? –

回答

3

這可能是一個權限錯誤,與openpyxl無關。使用r的想法是完全錯誤的。使用os.path可以編寫一個路徑,其中運行腳本的任何用戶都有權寫入。

+0

如果你有一個使用反斜槓(比如'c:\ path \ to \ file.txt')的Windows路徑名,使用'r'的想法很有用。但在這種情況下,使用原始字符串並沒有什麼不同,因爲您的文件路徑只是一個沒有特殊字符的文件名。 –

+0

@HåkenLid。習慣於將r''字符串用於正則表達式之外的任何其他東西真的不是一個好主意。始終使用'os.path'作爲文件。這使代碼更便攜,更可靠。 –

+0

許可錯誤('EACCES')應該如此標識。 'errno'設置爲'EINVAL'意味着無效參數或者發生了一些未映射的Windows錯誤。使用WinDbg或cdb等平臺調試程序檢查這類問題最容易,以獲取底層的Windows錯誤代碼和內核狀態代碼。 – eryksun

相關問題