(申し訳ありませんが、まだコメントを追加できません。)
[後で編集、次のステートメントは間違っています!!!] 「davesnitty が生成する行ループはrows = [[]] * 21
. これは空のリストのリストを作成するので間違っていますが、空のリストは外側のリストのすべての要素によって共有される単一の空のリストになります。
標準の csv モジュールの使用に対する私の +1。ただし、ファイルは常に閉じておく必要があります。特に、多くのファイルを開く場合は特にそうです。また、バグがあります。ここに結果を書き込むだけですが、 -- を介してファイルから読み取られた行。解決策は実際にはありません。基本的に、ファイルから読み取った行は、行番号に関連するサブリストに追加する必要があります。行番号は enumerate(reader) を介して取得する必要があります。ここで、reader は csv.reader(fin, ...) です。
[後で追加]次のコードを試して、puprose のパスを修正します。
import csv
import glob
import os
datapath = './data'
resultpath = './result'
if not os.path.isdir(resultpath):
os.makedirs(resultpath)
# Initialize the empty rows. It does not check how many rows are
# in the file.
rows = []
# Read data from the files to the above matrix.
for fname in glob.glob(os.path.join(datapath, '*.data')):
with open(fname, 'rb') as f:
reader = csv.reader(f)
for n, row in enumerate(reader):
if len(rows) < n+1:
rows.append([]) # add another row
rows[n].extend(row) # append the elements from the file
# Write the data from memory to the result file.
fname = os.path.join(resultpath, 'result.csv')
with open(fname, 'wb') as f:
writer = csv.writer(f)
for row in rows:
writer.writerow(row)