2016-10-21 75 views
1

我知道這不是寫這個函數的最簡潔的方式,而是裸露在我身邊,我是一個靜止的,學習!我的目標是將給定目錄中的所有文本文件合併到一個主文本文件中。使用python將.txt文件(在同一個目錄中)合併爲一個主要的.txt文件

第一個當我運行這個功能,一切正常。新的合併文件與原始文件保存在同一個目錄中。當我嘗試重新運行該功能時,我收到一條錯誤消息!

def merge_files(path): 
    ''' mergers txt files into one main file''' 
    now = datetime.datetime.now() 
    date = ("%s_%s_%s_") %(now.month,now.day,now.year) 
    files_to_merge = os.listdir(path) 
    merged_file_list = [] 
    counter = 1 
    for file in files_to_merge: 
     if file.endswith(".txt"): 
      with open(path+("file"+str(counter))+".txt","r") as files: 
       files = files.readlines() 
       merged_file_list.append(files) 
       counter = counter + 1 
    new_list = ("\n").join(["".join(x) for x in merged_file_list]) 
    print (new_list) 
    with open (path + date + "final.txt" ,"w") as final: 
     return final.write(new_list) 

這裏的錯誤消息我得到:

IOError: [Errno 2] No such file or directory: '/Users/star/Desktop/udemy/Sample-Files/file4.txt'

我知道有什麼東西撥錯與對,但我不知道是什麼!

+0

我懷疑問題在於你的合併文件第二次被考慮,因爲它們在相同的目錄和txt擴展名。但也許這是故意的?無論如何,由於目錄內容不同,行爲第二次不同。 –

+0

錯誤消息告訴您,您的文件在該位置不存在。 –

+0

錯誤信息告訴你該文件沒有找到,我想你生成文件位置的方式,你可以簡單地使用'open(os.path.join(path,file),「r」)' –

回答

0

請勿使用path+("file"+str(counter))+".txt",請使用os.path.join(path, file)(或更簡單地在Mac中:path + '/' + file)。目前尚不清楚爲什麼當你在那裏生成文件名時要生成這些文件名。

發生什麼事情是,首先你有file1.txt,file2.txtfile3.txt。你運行的腳本和你計算的計數器工作正確的文件名,所以它完成很好。它創建一個新文件<date>final.txt,所以現在該目錄有4個文件。然後你再次運行腳本,循環運行4次,因爲現在有4個文件,所以它試圖找到file4.txt,但沒有理由它應該在那裏。

相關問題