2012-04-23 11 views
0

に私は2つの列とデータの21行を含む125個のデータファイルを持っていると私は、125列のペアのみ21として(単一.csvファイルにインポートしたいのですが行)。 これは私のデータファイルがどのように見えるか:Python-のインポート複数のファイルを一つの.csvファイル

enter image description here

私のpythonにかなり新しいですが、私は次のコードが出ている:

import glob 
Results = glob.glob('./*.data') 
fout='c:/Results/res.csv' 
fout=open ("res.csv", 'w') 
for file in Results: 
g = open(file, "r") 
fout.write(g.read()) 
g.close() 
fout.close() 

上記のコードに問題があることですすべてのデータは125×21行の2つの列にのみコピーされます。

ご協力いただきありがとうございます。

+2

これは完全に 'paste'のための仕事です。 –

+1

pythonに貼り付けコマンドがありますか? – Esan

+0

Pythonペーストがありますが、それは私の話ではありません。 –

答えて

1

これは動作するはずです:あなたが多数のファイルをしようとした場合、このメソッドはおそらく失敗します

import glob 

files = [open(f) for f in glob.glob('./*.data')] #Make list of open files 
fout = open("res.csv", 'w') 

for row in range(21): 
    for f in files: 
     fout.write(f.readline().strip()) # strip removes trailing newline 
     fout.write(',') 
    fout.write('\n') 

fout.close() 

。なお、私はPythonでデフォルトの制限があると信じて256

+0

申し訳ありませんが、連結線の間にカンマを含めるのを忘れてしまいました。うまくいけば、今 – SudoNhim

+0

コードいただきありがとうございますが、唯一の125列があるとして、若干の問題が、フォーマットであり良いことがあります(Excelで開くときの列のペアが一緒に結合されているIE) – Esan

+0

申し訳ありませんが、私は、約1そのエラーを修正しました私はそれを投稿した後、分。あなたがまだそれを修正していない場合は、再度コピー貼り付けてみてください:) – SudoNhim

1
あなたがやってみたいことがあり

python CSVモジュール(http://docs.python.org/library/csv.html)は、CSVファイルの読み書きに非常に便利なメソッドを提供します。 250列のデータで21行しか必要ないと述べたので、21個のpythonリストを行として作成し、ファイルをループしながら各行にデータを追加することをお勧めします。

のようなもの:

import csv 

rows = [] 
for i in range(0,21): 
    row = [] 
    rows.append(row) 

#not sure the structure of your input files or how they are delimited, but for each one, as you have it open and iterate through the rows, you would want to append the values in each row to the end of the corresponding list contained within the rows list. 

#then, write each row to the new csv: 

writer = csv.writer(open('output.csv', 'wb'), delimiter=',') 
for row in rows: 
    writer.writerow(row) 
+0

ありがとうございます。私は今質問に含まれている写真を見てください。 – Esan

1

(申し訳ありませんが、私はまだ、コメントを追加することはできません。)

[次の文が間違っている、後で編集!!!]「davesnittyさんが生成行ループはrows = [[]] * 21で置き換えることができます。これは空リストのリストを作成するので間違っていますが、空のリストは外部リストのすべての要素で共有される単一の空のリストになります。

マイ+1標準csvモジュールを使用します。しかし、ファイルは常に閉鎖されていなければなりません。また、バグがあります。あなたが結果をここに書き込んだにもかかわらず、ファイルから読み込んだ行。解決策は実際にはありません。基本的には、ファイルから読み込んだ行は、行番号に関連するサブリストに追加する必要があります。行番号は、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) 
関連する問題