2016-11-21 8 views
0

CSVファイルにデータがあり、特定のセルの内容を他のファイルに入れる必要があります。ここにcsvファイルの簡略版があります。データを特定のCSVセルから別のファイルに書き出します。

A;B;C;D 
A1;B1;C1;D1 
A2;B2;C2;D2 
A3;B3;C3;D3 
A4;B4;C4;D4 

csvファイルは、好ましくはnumpyで2次元配列に変換する必要があります。その後、配列からのデータは他のいくつかのファイルに書き込まれます。ここに簡略化されたコードのスニペットがあります。

import numpy 
table = numpy.genfromtxt('table.csv', delimiter=';', skip_header=1) 

for row in range (4): 
    output = open('array %s.txt' %(row+1), 'w') 
    for clmn in range (4): 
     output.write('%s' %table[row][clmn]) 

output.close() 

私は、配列内のデータを置くために適切な方法を見つけるstruggelingされています。どのようにこれが実現するか、私が作った間違いを見つけましたか?


編集:問題が見つかりました。 numpyが正しくインストールされていません。 私はコードにいくつか微調整を加えなければなりませんでした。

import numpy 

#get table size 
table = numpy.genfromtxt('table.csv', delimiter=';') 
rows, cols = table.shape 

#get table data 
table = numpy.recfromtxt('table.csv', delimiter=';', dtype=str) 

#write table in different files 
for row in range(rows): 
    output = open('array %s.txt' %row, 'w') 
    for clmn in range(cols): 
     output.write('%s\t' %table[row][clmn]) 
    output.close() 

これは新しいコードで、A2 B2 C2 D2

2.txt A1 B1 C1 D1

配列1.TXT A B C D

配列0.txt

配列を意図したとおり、それはファイルを出力します配列3.txt A3 B3 C3 D3

配列4.txt A4 B4 C4 D4

+0

アーカイブにはどのような形式がありますか? – eyllanesc

+0

このコードで何が問題になっていますか? btw 'output.close()'はループの内側にあるべきです –

+0

アーカイブは、あるテキストの間にテーブルのデータを含んでいます。しかし、これは問題ではないので、これは私の質問とは無関係です。 問題は、出力ファイルが作成されないためにエラーが発生する可能性があることです。 –

答えて

1

output.closeは()ループ内にある必要があり、それを試してみてください。

import numpy 

table = numpy.genfromtxt('table.csv', delimiter=';', skip_header=1) 
rows, cols = table.shape 
for row in range(rows): 
    output = open('array %s.txt' % (row + 1), 'w') 
    for clmn in range(cols): 
     output.write('%s\t' % table[row][clmn]) 

    output.close() 
+0

私は 'rows'と' cols'変数を使っています。これは私のプログラムをかなり単純化します:)。しかし、あなたのコードは出力ファイルも作成しません。多分、私は何か間違ったことをしています、それ以外のコードitsef? –

+0

私にファイルを作成すると – eyllanesc

0

numpy配列が必要ない場合は、次のようなものが役に立ちます。

import csv 

with open('table.csv', 'r') as csv_file: 
    reader = list(csv.reader(csv_file, delimiter=';')) 

    # skips header line 
    for row in range(1, len(reader)): 
     with open('array %s.txt' % row, 'w') as out_file: 
     for i in reader[row]: 
      # Modify this line to change what the output file contains 
      out_file.write('%s' % i) 
+0

あなたのコードは出力ファイルも作成しません。私はもう何か間違っていると思います。何か案は? –

+0

私は単語をタイプミスした、もう一度お試しください?それは私のマシン上のファイルをPython 3で作っています。 – Navidad20

0

あなたがnp.savetxtでcsvファイルを書き込むことができます。例えば

、リテラルとしてあなたの例を取っ​​て(それが本当に浮いている?)

ここ
In [1]: txt = b"""A;B;C;D 
    ...: A1;B1;C1;D1 
    ...: A2;B2;C2;D2 
    ...: A3;B3;C3;D3 
    ...: A4;B4;C4;D4 
    ...: """.splitlines() 

In [7]: table= np.genfromtxt(txt,delimiter=';',skip_header=1,dtype='U2') 
In [8]: table 
Out[8]: 
array([['A1', 'B1', 'C1', 'D1'], 
     ['A2', 'B2', 'C2', 'D2'], 
     ['A3', 'B3', 'C3', 'D3'], 
     ['A4', 'B4', 'C4', 'D4']], 
     dtype='<U2') 
In [9]: np.savetxt('test.csv',table,header='A,B,C,D',delimiter=',',fmt='%3s') 
In [10]: cat test.csv 
# A,B,C,D 
A1, B1, C1, D1 
A2, B2, C2, D2 
A3, B3, C3, D3 
A4, B4, C4, D4 

私は別の区切り文字や書式設定で、バックアウトと同じ値を書きました。

In [11]: np.savetxt('test.csv',table,header='A,B,C,D',fmt='%s %s %s %s') 
In [12]: cat test.csv 
# A,B,C,D 
A1 B1 C1 D1 
... 

ですから、これらの線に沿って、あなたの書き込みを変更できます:

savetxtは基本的に

for row in table: 
    f.write(fmt%tuple(row)) 

fmtは、あなたが完全な形で提供する1つである、またはあなたのfmtから作成された場合には、ありません

In [13]: for row in table: 
    ...:  print('%s %s,%s;%s'%tuple(row)) 
    ...:  
A1 B1,C1;D1 
A2 B2,C2;D2 
A3 B3,C3;D3 
A4 B4,C4;D4 
関連する問題