我在csv文件中有数据,需要将特定单元格的内容放在其他文件中。这是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()
这是新代码,它按预期输出文件
array 0.txt A B C D
array 1.txt A1 B1 C1 D1
array 2.txt A2 B2 C2 D2
array 3.txt A3 B3 C3 D3
array 4.txt A4 B4 C4 D4
答案 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()
答案 1 :(得分: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)
答案 2 :(得分: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
在这里,我使用不同的分隔符和格式编写了相同的值。
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