2016-10-21 4 views
1

これは、この機能を書く最も簡潔な方法ではありませんが、私は裸で、学ぶ!私の目標は、特定のディレクトリ内のすべてのテキストファイルを1つのメインテキストファイルに結合することです。pythonを使って(同じディレクトリ内の).txtファイルを1つのメインの.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'

私はカウンターでworng何かがあります知っているが、私はわかりませんよ!

+0

問題は、マージされたファイルが、同じディレクトリにあり、拡張子がtxtであるため、2回目に考慮されることです。しかし、意図的なのかもしれませんか?とにかく、ディレクトリの内容が異なるため、2回目の動作が異なります。 –

+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.txtおよびfile3.txtがあります。スクリプトを実行すると、カウンタで計算したファイル名が正しく動作するため、正常に完了します。 <date>final.txtという新しいファイルが作成されるので、ディレクトリには4つのファイルがあります。その後、スクリプトをもう一度実行すると、ループが4回実行されます。なぜなら、4つのファイルがあるため、file4.txtを見つけようとしますが、そこにある理由はありません。

関連する問題