2016-10-12 4 views
0

Excel에서,이 같은 것을 사용할 수있을 것입니다 : (마지막으로 당신은에 결과를 이동 사용자 칠해의이 아래로 스프레드 시트, 그리고 단순히 A와 B는 삭제)두 개의 열을 연결하고 파이썬에서 csv를 업데이트하는 방법은 무엇입니까?

=CONCATENATE(A1," ",B1) 

최종 결과는 A와 B 열을 하나의 열 (A)로 병합하고 하나의 공백으로 구분해야합니다.

여기 파이썬에서

는 내가 지금까지 무엇을 가지고 :

import csv 
with open("test.csv","rb") as source: 
    rdr= csv.reader(source) 
    with open("result","wb") as result: 
     wtr= csv.writer(result) 
     for r in rdr: 
      print("Adding merged COL1/COL2 into one column for every row...") 
      wtr.writerow(r+[r[0] + ' ' + r[1]]) 
      print("Deleting COL1/COL2 columns from every row...") 
      del r[0] 
      del r[0] 
      wtr.writerow(r) 
    result.close(); 

제대로 두 개의 열을 병합하고 파일의 마지막에 열을 추가 않습니다 위의 코드는 제대로 처음 두 삭제되지 않습니다,하지만 행이 완료되면 wtr.writerow가 이미 호출 되었기 때문에 이것이라고 생각합니다. 또한 열이 왼쪽으로 이동하는 방법을 확실히 알지 못합니다.

답변

0

그래서 csv에서 읽고 쓰는 모든 행은 목록입니다. 맞습니까? 따라서 다른 단계 또는 두 단계를 거쳐 원하는 목록을 만든 다음 작성하십시오.

예컨대

import csv 
with open('test.csv') as f: 
    reader = csv.reader(f) 
    with open('output.csv', 'w') as g: 
     writer = csv.writer(g) 
     for row in reader: 
      new_row = [' '.join([row[0], row[1]])] + row[2:] 
      writer.writerow(new_row) 

또한 csv에서 이진 ('rb', 'wb')을 읽고 쓸 필요가 있는지 의심 스럽습니다.

+0

이것은 훨씬 깨끗한 해결책입니다. 설명해 주셔서 감사합니다. – tonemgub

1

당신은 그 루프에서 writerow을 두 번 호출하고 있습니다. 나는 당신이 그것을 원하지 않는다고 생각합니다 - 병합 된 컬럼을 작성한 다음 다른 컬럼을 별도로 작성합니까? 제

당신은 단순히 시작 행의에 병합 된 열을 가입 할 수 있으며, 슬라이스 오프 이전 행 :

wtr.writerow([r[0] + ' ' + r[1]] + r[2:]) 
#   ^<- merged rows are added to the start 
#         ^<- slice off old A1 and B1 

당신은 더 이상 del 문을 필요로하지 않습니다 하나의 호출 writerow에 삽입 수정 된 : 또한

import csv 

with open("test.csv","rb") as source, open("result","wb") as result: 
    rdr = csv.reader(source) 
    wtr = csv.writer(result) 
    for r in rdr: 
     wtr.writerow([r[0] + ' ' + r[1]] + r[2:]) 

, 당신은 멀티 포트 넣을 수 있습니다 위에서 한 것처럼 with 성명 뒤에 표현.


마지막으로 파일을 수동으로 닫지 않아도됩니다 (result.close()). with 컨텍스트는 이미 이며입니다.

+0

split을 사용하는 것이 좋습니다. close()가 필요한지 확실하지 않았습니다. 감사! – tonemgub

관련 문제