2013-07-19 41 views
14

giả sử chúng ta có nhiều tập tin văn bản như sau:kết hợp nhiều file văn bản vào một file văn bản sử dụng python

file1:

abc 
def 
ghi 

file2:

ABC 
DEF 
GHI 

file3:

adfafa 

tệp4:

ewrtwe 
rewrt 
wer 
wrwe 

Làm sao chúng ta có thể làm cho một tập tin văn bản như dưới đây:

kết quả:

abc 
def 
ghi 
ABC 
DEF 
GHI 
adfafa 
ewrtwe 
rewrt 
wer 
wrwe 

đang liên quan có thể là:

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

Sau này? Bất kỳ giúp đỡ?

+0

chủ đề này là một ducplicate của http://stackoverflow.com/questions/13613336/python-concatenate-text-files – sancelot

Trả lời

35

Bạn có thể đọc nội dung của mỗi tập tin trực tiếp vào phương pháp ghi của tập tin đầu ra xử lý như thế này:

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

cảm ơn bạn. tôi chấp nhận câu trả lời của bạn bởi vì mã của bạn là mạnh mẽ. kể từ khi tôi mới, bạn có thể giải thích thủ tục infile.read() @ apiguy –

+0

Phương thức '.read()' của một tệp xử lý đọc nội dung của một tệp và tạo ra một chuỗi nội dung của nó. – apiguy

4

Bạn có thể thử một cái gì đó như thế này:

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) 

Nên thẳng về phía trước để đọc.

5

Module fileinput được thiết kế một cách hoàn hảo đối với trường hợp sử dụng này.

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

Đó có lẽ là phương pháp hiệu quả nhất và hoạt động hoàn hảo trong 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

thêm một số giải thích cho câu trả lời của bạn. – HaveNoDisplayName

+0

dòng bằng cách đọc/ghi một tệp không giống như đọc/ghi các byte của tệp. chỉ là FYI. –

0

Nó cũng có thể kết hợp các file bằng cách kết hợp các lệnh hệ điều hành. Ví dụ:

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

Đây không phải là cách tiếp cận di động. – KeshV

Các vấn đề liên quan