2017-05-09 100 views
0
IOError: [Errno 22] invalid mode ('w+') or filename: 'hodor_2017-05-09_14:03:38.txt' 

所以我具有創建文件,其中,因爲它是「姓名」 [定界符]「日期時間」的.txterrno的22無效模式W +或文件名

我仰視的代碼不同的位如問題:

Turn a string into a valid filename?

python: how to convert a string to utf-8

https://github.com/django/django/blob/master/django/utils/safestring.py

,它似乎仍然不適合我。

我的想法很簡單:給定一個名稱和內容,寫一個帶有該名稱和內容的文件。

我的代碼是:

def create_json_file(name, contents): 
    filename = u"%s_%s.json" % (name, datetime.datetime.now().strftime("%Y/%m/%d_%H:%M:%S")) 
    print "%s" % filename 
    filename = slugify(filename) 
    f = open(filename, "w+") 
    f.write(contents) 
    f.close() 

,正如你可以看到我已經調整它。我正在查找django所做的結果,它使用slugify。

我原來沒有這一行。也許有更好的方法來命名文件。我認爲名稱和日期時間是非常正常的,但我不知道我應該使用名稱和日期時間之間使用什麼分隔符等。

爲了記錄,我目前沒有使用Django,因爲我沒有對框架的需求。我只是想測試一種方式來傳遞一個字符串和一個json地圖,並將它變成一個config.json文件。

最後,我想利用來自網站的AJAX請求來做到這一點,但這不在此問題的範圍之內。

+1

難道這只是歸結爲Windows禁止在文件名冒號?解決方案是使用不同的分隔符。 – tdelaney

回答

3

在你的文件名掩碼中使用不同的分隔符:

filename = u"%s_%s.json" % (name, datetime.datetime.now().strftime("%Y_%m_%d_%H%M%S")) 

操作系統試圖打開2005/04/01_5:45:04.json。文件/目錄名稱中不允許出現斜槓。

編輯:刪除冒號以迴應評論。

+2

在Windows上,也不是冒號。可能會考慮轉換爲ISO 8601基本格式 - '%Y%m%dT%H%M%S',沒有冒號,沒有斜線,'T'將日期部分和時間部分分開......並且,這是一個實際的標準。 –

+0

感謝你們倆。我知道關於斜槓,出於某種原因,我很愚蠢,並沒有想到結腸。我的錯。是的,我可能只是使用isoformat() – Fallenreaper

+0

@CharlesDuffy只是一個後續行動,以iso格式做這件事返回這個錯誤'IOError:[Errno 22] invalid mode('w +')or filename:u'hodor_2017-05-10T10 :23:07.057000。 json''所以它似乎不會做標準的ISO,所以我把它移動到你的格式。默認情況下,Python的字符串類使用的ISO 8601似乎是:'YYYY-MM-DDTHH:MM:SS.mmmmmm'。但是,使用您定義的特定格式進行操作。 – Fallenreaper

相關問題