2016-08-13 204 views
0

我發現了類似的問題,並嘗試了內部提出的解決方案,似乎沒有解決我的問題。我試圖做的是實質上將數據從一個文件複製到另一個文件,即使它沒有錯誤我們已經驗證了'line'變量是一個字符串並且包含正確的數據,但它不會寫入文件。我目前使用python 2.7。python寫入文件不寫

我試圖添加.flush(),因爲一些其他解決方案建議沒有成功。我已經證實,如果我在第一個for循環之前寫入一個靜態字符串,它實際上會寫入該文件。我的懷疑是這兩個文件打開並迭代其中之一有關,但我不確定這是否有效。

with open("data/data.csv", 'w+') as data_file, open("data/raw/" + data_point + ".csv", 'r') as raw_file: 
    for line in raw_file: 
     line = line.split(',') 
     temp_date = datetime(int(line[0]), int(line[1]), int(line[2])) 
     if newest_date == datetime(1,1,1): 
      newest_date = temp_date 
     if temp_date < oldest_date: 
      oldest_date = temp_date 
     sorted_raw = [[float(line[4]), float(line[5])]] + sorted_raw 

    raw_file.seek(0) # reset read pointer 
    for line in raw_file: 
     data_file.write(line) 

編輯:我現在意識到我的白癡。我有第二個未完成的功能,基本上是這個修改後的副本粘貼,但沒有寫入。每次打開文件的「w +」方法都會清除它,因爲在完成這段代碼之後總是會調用第二個函數,所以我永遠無法捕獲寫入的文件。我很抱歉的噪音

+0

您的'data'子目錄是否與您的腳本存在於相同的目錄中? – Soviut

+0

是的,我想我也應該注意到這是目前在Windows 10下運行的 – beeedy

+0

在這種情況下(在那裏真的不存在問題,因爲問題完全不同)的禮貌的事情是刪除你的問題 - 儘管在這種情況下,您需要@ Soviut的合作才能這樣做,因爲低代表用戶無法在任何有回答的答案出現時自行刪除。 –

回答

1

你可以寫在第一個循環的數據文件。

with open("data/data.csv", 'w+') as data_file, open("data/raw/" + data_point + ".csv", 'r') as raw_file: 
    for line in raw_file: 
     line = line.split(',') 
     temp_date = datetime(int(line[0]), int(line[1]), int(line[2])) 
     if newest_date == datetime(1,1,1): 
      newest_date = temp_date 
     if temp_date < oldest_date: 
      oldest_date = temp_date 
     sorted_raw = [[float(line[4]), float(line[5])]] + sorted_raw 

     data_file.write(line) 
+0

複製意大利麪錯誤,嚴重道歉並且已得到解決! (這實際上並不在代碼中) – beeedy

+0

@beeedy我已經更新了我的答案。 – Soviut

+0

編輯原始帖子,是我完成的一個錯誤,在腳本中留下未完成的代碼來運行。 – beeedy