2013-07-19 15 views
14

supponiamo di avere molti file di testo come segue:combinare più file di testo in un unico file di testo utilizzando python

file1:

abc 
def 
ghi 

file2:

ABC 
DEF 
GHI 

file3:

adfafa 

file4:

ewrtwe 
rewrt 
wer 
wrwe 

Come possiamo fare un file di testo come di seguito:

risultato:

abc 
def 
ghi 
ABC 
DEF 
GHI 
adfafa 
ewrtwe 
rewrt 
wer 
wrwe 

codice correlate possono essere:

import csv 
import glob 
files = glob.glob('*.txt') 
for file in files: 
with open('result.txt', 'w') as result: 
result.write(str(file)+'\n') 

Dopo questo? Qualsiasi aiuto?

+0

questa discussione è un ducplicate di http://stackoverflow.com/questions/13613336/python-concatenate-text-files – sancelot

risposta

35

È possibile leggere il contenuto di ciascun file direttamente nel metodo write del manico file di output come questo:

import glob 

read_files = glob.glob("*.txt") 

with open("result.txt", "wb") as outfile: 
    for f in read_files: 
     with open(f, "rb") as infile: 
      outfile.write(infile.read()) 
+0

grazie. Ho accettato la tua risposta perché il tuo codice è potente. dal momento che sono nuovo, puoi spiegare la procedura infile.read(). @ apiguy –

+0

Il metodo '.read()' di un handle di file legge il contenuto di un file e produce una stringa del suo contenuto. – apiguy

4

si potrebbe provare qualcosa di simile:

import glob 
files = glob.glob('*.txt') 

with open('result.txt', 'w') as result: 
    for file_ in files: 
     for line in open(file_, 'r'): 
      result.write(line) 

Dovrebbe essere semplice da leggere.

5

Il modulo fileinput è progettato perfettamente per questo caso d'uso.

import fileinput 
import glob 

file_list = glob.glob("*.txt") 

with open('result.txt', 'w') as file: 
    input_lines = fileinput.input(file_list) 
    file.writelines(input_lines) 
+0

Probabilmente è il metodo più efficiente e funziona perfettamente in Python 2.7 – user113478

-1
filenames = ['resultsone.txt', 'resultstwo.txt'] 
with open('resultsthree', 'w') as outfile: 
    for fname in filenames: 
     with open(fname) as infile: 
      for line in infile: 
       outfile.write(line) 
+0

aggiungi qualche spiegazione alla tua risposta. – HaveNoDisplayName

+0

lettura/scrittura riga per riga un file non equivale alla lettura/scrittura dei byte di un file. solo FYI. –

0

E 'anche possibile combinare i file incorporando i comandi del sistema operativo. Esempio:

import os 
import subprocess 
subprocess.call("cat *.csv > /path/outputs.csv") 
+0

Questo approccio non è portatile. – KeshV

Problemi correlati