使用 python 将数据从特定的 csv 单元格写入另一个文件

Write data form specific csv cell to another file with python

我在一个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()

这是新代码,它按预期输出文件

数组0.txtA B C D

数组1.txtA1 B1 C1 D1

数组2.txtA2 B2 C2 D2

数组3.txtA3 B3 C3 D3

数组4.txtA4 B4 C4 D4

如果您不需要 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)

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

你可以用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