python script to concatenate all the files in the directory into one file

copy, file, python

Solution

Use `shutil.copyfileobj` to copy data:

import shutil

with open(outfilename, 'wb') as outfile:
    for filename in glob.glob('*.txt'):
        if filename == outfilename:
            # don't want to copy the output into the output
            continue
        with open(filename, 'rb') as readfile:
            shutil.copyfileobj(readfile, outfile)

`shutil` reads from the `readfile` object in chunks, writing them to the `outfile` fileobject directly. Do not use `readline()` or a iteration buffer, since you do not need the overhead of finding line endings.

Use the same mode for both reading and writing; this is especially important when using Python 3; I've used binary mode for both here.

Problem

I have written the following script to concatenate all the files in the directory into one single file. Can this be optimized, in terms of idiomatic python time Here is the snippet: ``` import time, glob outfilename = 'all_' + str((int(time.time()))) + ".txt" filenames = glob.glob('*.txt') with open(outfilename, 'wb') as outfile: for fname in filenames: with open(fname, 'r') as readfile: infile = readfile.read() for line in infile: outfile.write(line) outfile.write("\n\n") ```

Original source

Related problems