2016-11-21 33 views
0

我有一個csv文件中的數據,需要將特定單元格的內容放入其他文件中。這裏是csv文件的簡化版本。使用python將數據表單特定的csv單元格寫入另一個文件

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

csv文件應該轉換成一個二維數組,最好用numpy。之後,數組中的數據應寫入其他文件中。這是簡化代碼的一個片段。

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() 

我一直在尋找一種正確的方式將數據放入數組中。任何想法如何實現,或者你發現我犯了什麼錯誤?


編輯:我發現了這個問題。 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() 

這是新的代碼和它輸出的文件如預期

陣列0.txt A B C D

陣列的1.txt A1 B1 C1 D1

陣列2.txt A2 B2 C2 D2

array 3.txt A3 B3 C3 D3

array 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

你可以寫一個csv用np.savetxt;

例如,把你的例子爲文字(是不是真的漂浮?)

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 

在這裏,我已經寫了相同的值退了出來,用不同的分隔符和格式化。

savetxt呢,基本上

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

其中fmt是一個你完全提供,或創建了fmt

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 
... 

所以,你可以沿着這些路線修改寫

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 
相關問題