2016-11-21 1 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 파일은 numfix로 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() 

데이터를 배열에 넣는 올바른 방법을 찾는 데 어려움을 겪고 있습니다. 이것이 어떻게 실현 될 수 있었는지 또는 내가 만든 실수를 발견 한 아이디어가 있습니까?


편집 : 문제점을 발견했습니다. 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

배열 A1 B1 C1 D1 1.TXT

배열

A2 B2 C2 D2 2.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' 변수로 아이디어를 좋아합니다. 이것은 내 프로그램을 꽤 간단하게 만든다. :). 하지만 코드는 출력 파일을 만들지 않습니다. 어쩌면 내가 잘못한 일을하고있는 것일 수도있다. –

+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

단어를 입력하지 못했습니다. 다시 시도해주세요. 내 컴퓨터에 파일을 파이썬 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 

내가 다른 구분과 서식, 다시 밖으로 같은 값을 작성했습니다. fmt 당신이 전액 제공하는 하나, 또는에서 만든 곳

savetxt는 기본적으로,

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

를 수행하여 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 
관련 문제