2016-10-20 4 views
0

CSVの特定の行をターゲットにして特定の文字が一致した場合に上書きする目的で、ここにいくつかのPythonコードがあります。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」。私のコードは目標を設定できず、値 '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

を:「行の場合、[3] == 『R』: IndexError:範囲外のインデックスをリストする ' –

+0

'の場合、 'r'が 'if line [3] ==' r ''であることに注意してください。私は 'a'の代わりに 'r'を反映するようにコードを変更しました –

+0

空の行が必要です。私は行の長さのチェックを追加しました。 –

関連する問題