2017-04-09 138 views
0

我想用文件名稱中包含的當前日期創建一個日誌文件,然後將數據發送到日誌文件。Python文件無法打開[FileNotFoundError:]

import time 

current_date = str(time.strftime("%d/%m")) 

data = 'test data' 

log = open(current_date+"log.txt","a") 
log.write("> "+data+"\n") 
log.close() 

運行時,這會導致以下錯誤:

'FileNotFoundError: [Errno 2] No such file or directory: '09/04log.txt' 

我怎樣才能解決這個問題?

+3

不要/'在文件名中使用'。 '09/04log.txt'是目錄'09'中的文件'04log.txt',可能不存在。只需改變你的日期格式。 –

+0

順便說一下'time.strftime'已經返回一個字符串 –

回答

0

這是因爲在current_date 反斜線其結果將是a/b它告訴Python a是一個目錄,b是文件,所以最終的結果將是01/01log.txt是指01log.txt的文件在01目錄下。

0

如果文件不存在,您需要創建該文件。另外,文件名不能包含正斜槓,所以你試圖從一個可能不存在的目錄打開。

名稱的文件更好,使用a+模式

+0

我已經試過了,仍然是[Errno 2]沒有這樣的文件或目錄:'09 /04log.txt' – montymagic9

+0

查看更新的答案 –

0

,因爲你正試圖創建一個不存在的目錄中的文件,那就是禁止它失敗。您應該首先創建的文件夾:

try: 
    os.mkdir(os.path.dirname(current_date)) 
except OSError as e: 
    if e.errno == 17: 
    # directory already exists 
    pass 
    else: 
    raise 
0

如果你想創建一個含有該文件的新文件夾:使用open()

該文件夾必須事先存在。

import time,os 

def foo(): 
    try: 
     current_date = str(time.strftime("%d/%m")) 
     data = 'test data' 
     log = open(current_date+"log.txt","w") 
     log.write("> "+data+"\n") 
     log.close() 
    except FileNotFoundError: # If there is no folder... 
     os.mkdir(os.path.dirname(current_date)) 
     foo() 

如果你只是想在一個文件名

即不允許使用/,你不能這樣做。你不能使用其他符號如:

  • \
  • |
  • *
  • ?
  • "
  • <
  • >

即使嘗試命名文件,這些字符之一,手動,你會發現,你不能:

Image

在這種情況下,它是不允許的因爲這就像說「將此附加到此文件夾中的.txt文件」。沒有文件夾,你不能這樣做。


附註:我會使用with語句,還使用current_date = time.strftime("%d/%m"),因爲它始終是一個字符串