問題描述:
記錄一下拼接文件名時間戳的過程,回顧下可能的問題所在,希望能幫到同樣碰到這類問題的兄dei。
進行單元測試時,最后使用HTMLTestRunner生成的HTML分析報告,需要添加一個時間戳來辨別,但是我寫好后,一直報錯:
if __name__ == '__main__': suite = unittest.TestSuite() tests = [TestCase("test_check_res")] suite.addTests(tests) now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())).decode('utf-8') print now, type(now) filename = setting.CASE_PATH + now + "result.html" # CASE_PATH是獲取的當前目錄的絕對路徑 with codecs.open(filename, 'w', 'utf8') as f: runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='Test Report', description='HTMLTestRunner.',verbosity=2) runner.run(suite)
報錯情況為:
E:\huang\test\unit_test>py -2 testing.py Traceback (most recent call last): File "testing.py", line 43, in <module> open(filename, 'wb') IOError: [Errno 22] invalid mode ('wb') or filename: 'E:\\huang\\test\\2019-08-13 22:16:43 testing12345.html'
解決步驟:
1、真的是搜了好久的:IOError: [Errno 22] invalid mode ('wb') or filename:這段報錯信息,大家的回復都是轉義字符的問題:
The following reserved characters:
<
(less than)>
(greater than):
(colon)"
(double quote)/
(forward slash)\
(backslash)|
(vertical bar or pipe)?
(question mark)*
(asterisk)
2、仔細瞅瞅我的代碼,"%Y-%m-%d %H:%M:%S"中的:有問題,故修改為:
now = str(datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
完美解決,生成的文件名稱為:20190813221814 testing12345.html
3、拼接需注意的事項:
1)路徑在前,時間戳、名稱等在后
2)不能含有以上列表中的特殊字符
3)要寫入特定編碼的文本文件,請效仿codecs的示例,寫入unicode,由codecs自動轉換成指定編碼。