2017-06-30 76 views
2

我需要使用不同的名稱創建多個文件,但每隔幾秒我都會收集數據,然後我需要將這些數據保存在每個文件中,並使用不同的名稱,但唯一的代碼會生成一個文件,另一個數據會覆蓋現有文件而不會創建另一個數據。如何在Python中使用不同的名稱創建多個文件

這是我的代碼:

name= datetime.utcnow().strftime('%Y-%m-%d %H_%M_%S.%f')[:-3] 
    filename = "Json/%s.json"% name 

def get_json(): 
    if not os.path.exists(os.path.dirname(filename)): 
       try: 
        os.makedirs(os.path.dirname(filename)) 
       except OSError as exc: # Guard against race condition 
        if exc.errno != errno.EEXIST: 
         raise 
    with open(filename, "w") as f: 
       f.write("Hello") 

def net_is_up(): 
    while(1): 
     response = os.system("ping -c 1 " + hostname) 
     if response == 0: 
      print "[%s] Network is up!" % time.strftime("%Y-%m-%d %H:%M:%S") 
      #read_json() 
      get_json() 

     else: 
      print "[%s] Network is down :(" % time.strftime("%Y-%m-%d %H:%M:%S") 

     time.sleep(60) 
+0

此代碼不會做任何事情,因爲它從來沒有調用'get_json'。有什麼地方有循環嗎?或者這個文件重複執行? (如果是這樣,調用'get_json'的地方?)簡而言之,這段代碼是可以的,如果你調用'get_json',它應該創建一個文件,以代碼的運行時間命名。 – smarx

+0

作爲一個瘋狂的猜測,你可能想要移動'get_json'中的前兩行。 (這將修復看起來像這樣的代碼,但是接着有一個循環,重複調用'get_json'而不重新計算'filename'。) – smarx

+0

get_json是調用方法net_is_up() – Exbaby

回答

2

移動的get_json函數內以下行:

name = datetime.utcnow().strftime('%Y-%m-%d %H_%M_%S.%f')[:-3] 
filename = "Json/%s.json"% name 

目前的情況是,filename當你開始這個腳本只計算一次。每次要保存文件時都需要執行此操作。

1

這就是答案:

def get_json(): 
    name= datetime.utcnow().strftime('%Y-%m-%d %H_%M_%S.%f')[:-3] 
    filename = "Json/%s.json"% name 
    if not os.path.exists(os.path.dirname(filename)): 
       try: 
        os.makedirs(os.path.dirname(filename)) 
       except OSError as exc: # Guard against race condition 
        if exc.errno != errno.EEXIST: 
         raise 
    with open(filename, "w") as f: 
       f.write("Hello") 

def net_is_up(): 
    while(1): 
     response = os.system("ping -c 1 " + hostname) 
     if response == 0: 
      print "[%s] Network is up!" % time.strftime("%Y-%m-%d %H:%M:%S") 
      #read_json() 
      get_json() 

     else: 
      print "[%s] Network is down :(" % time.strftime("%Y-%m-%d %H:%M:%S") 

     time.sleep(60) 
相關問題