2016-10-20 5 views
0

CSV의 특정 행을 대상으로 사용자 입력을 취한 다음 특정 문자가 일치하면이를 덮어 쓸 수있는 Python 코드가 있습니다.파이썬 CSV 파일의 특정 행과 열을 편집

import csv 

line_count = 0 
marked_item = int(input("Enter the item number:")) 
with open("items.csv", 'r') as f: 
    reader = csv.reader(f, delimiter=',') 
    title = next(reader) 
    print(title) 
    print(title[3]) 
    lines = [] 
    for line in reader: 
     if title[3] == 'a': 
      line_count += 1 
      if marked_item == line_count: 
       title[3] = 'b' 
     lines.append(line) 
with open("items.csv", 'w', newline='') as f: 
    writer = csv.writer(f, delimiter=',') 
    writer.writerow(title) 
    writer.writerows(lines) 

이 코드는 원하는 방식으로 작동하지만 다른 행은 편집 할 수 없습니다. 예를 들어 출력이 코드는 다음과 같습니다

red,12.95,2,b #note, this change from 'a' to 'b' 
blue,42.5,3,a #How can I target this row and change it? 
green,40.0,1,a 

문제가 그때는 행 '파란색, 42.5하는'처럼 다른 행을 대상으로합니다. 내 코드는 타겟팅 할 수 없으며 값 'a'를 'b'로 변경합니다.

답변

1

line을 반복하고 title을 변경합니다. 다음을 수행하십시오 :

for line in reader: 
    if len(line)>3 and line[3] == 'a': 
     line_count += 1 
     if marked_item == line_count: 
      line[3] = 'b' 
    lines.append(line) 

제목이 없으므로 title = next(reader)을 삭제하십시오. 제목 라인이없는 입력 CSV를위한

전체 고정 코드 : 나는 처음이 일을 시도했지만 한

import csv 

line_count = 0 
marked_item = int(input("Enter the item number:")) 
with open("items.csv", 'r') as f: 
    reader = csv.reader(f, delimiter=',') 

    lines = [] 
    for line in reader: 
     if len(line)>3 and line[3] == 'a': 
      line_count += 1 
      if marked_item == line_count: 
       line[3] = 'b' 
     lines.append(line) 
with open("items.csv", 'w', newline='') as f: 
    writer = csv.writer(f, delimiter=',') 
    writer.writerow(title) 
    writer.writerows(lines) 
+0

이 오류를 얻을 : : R ''라인 [3] == 경우 '를 IndexError : 목록의 인덱스 범위가 ' –

+0

'인 경우 'line in [3] =='r ''에 'r'이 들어 있습니다. 'a'대신 'r'을 반영하도록 코드를 변경했습니다. –

+0

빈 줄이 있어야합니다. 행에 길이 검사를 추가했습니다. –

관련 문제