2016-09-27 2 views
2

두 개의 다른 열의 문자열을 결합하는 열을 CSV 파일에 추가하려고합니다. 이걸 시도 할 때마다 새 열만있는 출력 CSV 나 새 열이 아닌 원본 데이터가 모두있는 출력이 나옵니다.파이썬의 csv 파일에 새 열 추가

이것은 내가 지금까지 무엇을 가지고 :

with open(filename) as csvin: 
    readfile = csv.reader(csvin, delimiter=',') 
    with open(output, 'w') as csvout: 
     writefile = csv.writer(csvout, delimiter=',', lineterminator='\n') 
     for row in readfile: 
      result = [str(row[10]) + ' ' + str(row[11])] 
      writefile.writerow(result) 

어떤 도움을 주시면 감사하겠습니다.

+0

'[STR (행 [10])'STR을 + '+를 각각의 행의 마지막에 그 추가 [11])]'는 하나의 열에 불과합니다. 행에 다른 것을 쓰려고하지 않고 쉼표 구분 기호가 없습니다. 'row [10] '과'row [11]'을 기존 열뿐만 아니라 자체 열에 있어야하는 단일 값으로 결합하려고합니까? – roganjosh

+0

예 행 10과 11을 하나의 열에 결합하고 해당 열을 기존 csv에 추가하려고합니다. – glayne

+1

@glayne하지만'row'에 추가하지 마십시오 :'writefile.writerow (row + result)' –

답변

2

테스트 할 입력이 없지만 시도해보십시오. 현재 접근 방식은 입력 데이터에 이미 존재하는 각 행에 대한 기존 데이터를 포함하지 않습니다. extend은 각 행을 나타내는 목록을 가져온 다음 해당 목록에 다른 항목을 추가합니다 ... 열 추가와 같습니다.

import CSV 
with open(filename) as csvin: 
    readfile = csv.reader(csvin, delimiter=',') 
    with open(output, 'w') as csvout: 
     writefile = csv.writer(csvout, delimiter=',', lineterminator='\n') 
     for row in readfile: 
      row.extend([str(row[10]) + ' ' + str(row[11])]) 
      writefile.writerow(row) 
+0

'row'는'list' 또는'tuple'입니까? –

+0

@ PeterWood 나는 실수를 일찍 받았는데, 이제는 바로 잡았다. 그러나'csv.reader'는 각 행에 하위 목록이있는 중첩 목록을 반환해야합니다. – roganjosh

+0

이것은 '목록'입니다. [docs] (https://docs.python.org/2/library/csv.html# csv.reader) * csv 파일에서 읽은 각 행은 문자열 목록으로 반환됩니다. * –

0

glayne은 열 10과 11을 하나로 결합한다고 가정합니다. 일단, 나는 모든 행 대체 이동할 수 있습니다 작동하는지 확인하기 위해 테스트

def transform_row(input_row): 
    output_row = input_row[:] 
    output_row[10:12] = [' '.join(output_row[10:12])] 
    return output_row 

: 내 접근 방식에서 , 내가 먼저 하나의 행 변환하는 방법에 집중

with open('data.csv') as inf, open('out.csv', 'wb') as outf: 
    reader = csv.reader(inf) 
    writer = csv.writer(outf) 
    writer.writerows(transform_row(row) for row in reader) 

주를이 한 문에 여러 행을 쓰려면 writerows() 메서드를 사용합니다. 코드 아래

0

각 행 10 열 및 컬럼 (11)의 스트링을 결합 (행

import csv 
input = 'test.csv' 
output= 'output.csv' 
with open(input, 'rb') as csvin: 
    readfile = csv.reader(csvin, delimiter=',') 
    with open(output, 'wb') as csvout: 
     writefile = csv.writer(csvout, delimiter=',', lineterminator='\n') 
     for row in readfile: 
      result = row + [row[10]+row[11]] 
      writefile.writerow(result) 
관련 문제