2016-09-23 3 views
1

문자열 바꾸기 작업을 수행하는 입력 파일이 있습니다.바꾸기 후 CSV에 쓸 수 없습니다.

셀별로 파일을 읽고 문자열을 바꾼 다음 새 CSV 파일에 다시 씁니다.

input_file = open('/Users/tcssig/Desktop/unstacked2.csv', 'r', encoding='utf-8') 
output_file = open('/Users/tcssig/Desktop/unstacked3.csv', 'w', encoding='utf-8') 
writer = csv.writer(output_file , delimiter=' ') 
reader = csv.reader(input_file) 
for row in reader: 
    for string in row: 
     data = [string.replace('read','write')] 
     print(data) 
     writer.writerow(data) 

위의 코드는 정상적으로 실행되지만 빈 출력 파일이 표시됩니다.

Example of data : 

    reading reading reading reading 
interval  0 1 2 3 

who axis 


Mikael X 0 10 20 30 

Mikael Y 50 40 30 20 

Mikael Z 100 90 80 70 

Mike X 0 0.1 0.2 0.3 

Mike Y 0.5 0.4 0.3 0.2 

마이크 Z 1 0.9 0.8 0.7

내가 무슨 말이냐?

+0

들여 쓰기를 수정하십시오. 어떤 코드가'for string in row :'블록에 들어가는지는 명확하지 않습니다. 또한 명확하게하기 위해 각 셀을 별도의 행으로 변환하려고합니까 아니면 셀의 값을 바꿉니 까? – ShadowRanger

+0

파일을 자동으로 닫으려면 ['with'] (https://docs.python.org/2/reference/compound_stmts.html#the-with-statement) 문을 사용하십시오. – martineau

+0

@scott, 위의 데이터 예제를 추가했습니다. – Sarang

답변

1

내용 : 코드와

"Roll No" English read Science 
"Roll No" English Write Science 

문제 :

  1. @Scott에 언급 된 것처럼 파일은 닫히지 않습니다.
  2. 너는 독서 세포가 for string in row:에 의하여 거기 끈을 대체하고있다. 하지만 교체 후 파일에 해당 행을 쓰고 있습니다. 예를 들어, 코드 출력 파일은 파일을 찾습니다 :

    롤 없음

    영어 없다

    당신이 작성하는 즉, 이것은 위에서 언급 한 이유 때문입니다 과학

읽기 각 세포.

어떻게 작동합니까? 코드 인라인

댓글

import csv 
input_file = open('mark.csv', 'r', encoding='utf-8') 
output_file = open('result.csv', 'w') 
writer = csv.writer(output_file , delimiter=' ', encoding='utf-8') 
reader = csv.reader(input_file) 
for row in reader: 
    #Initailize empty list for each row 
    data = [] 
    for string in row: 
     #Replace and add to data list 
     data.append(string.replace('read','write')) 
    #Now write complete 
    writer.writerow(data) 

input_file.close() 
output_file.close() 

는 출력 :

"Roll No" English write Science 

"Roll No" English Write Science 

당신은 csv 모듈없이 같은 일을 달성 할 수있다.

with open("mark.csv") as input_file: 
    with open("result.csv",'w') as output_file: 
     for line in input_file: 
      new_line = (line.replace("read","write")).replace(","," ") 
      output_file.write(new_line) 
+0

첫 번째 코드는 데이터 구조를 인식하기위한 구분 기호없이 한 줄 형식으로 데이터를 씁니다. – Sarang

+0

원하는 구분 기호는 무엇입니까 - 공백이나 쉼표입니까? 게시 한 코드에는 출력 파일에 대해 구분 기호 = ''이 (가) 있습니다. 나는 같은 것을 사용했다. –

+1

죄송합니다. 내 잘못이야. 그것의 완벽한 작업, 건배 .... – Sarang

2

닫기 파일 :

또한
output_file.close() 
input_file.close() 

이 답변을 참조 문맥 관리자의 사용에 대한 입력 파일의 https://stackoverflow.com/a/441446/4663466

+0

감사합니다. Scott 님, 이제는 출력을 얻을 수 있지만 모두 하나의 CSV 열에 있습니다. 내 입력 파일 구조를 유지할 수있는 방법이 있습니까? – Sarang

+0

질문 아래의 주석을보십시오 -'writer.writerow (data)'줄이 잘못 들여 쓰기되었습니다. –

+0

@Sarang 중첩 루프가 CSV의 행을 반복 한 다음 각 문자열을 통해 '읽기'를 '쓰기'로 바꿉니다. 한 줄씩 편집하는 방법에 대한 질문이있는 경우 새로운 질문을해야합니다. 가능한 경우 str.replace()가 출력을 편집 할 수있는 유일한 옵션이 아니기 때문에 가능한 경우 데이터의 예가 있으면 도움이됩니다. – Scott

관련 문제