Python编辑csv文件的特定行和列

cor*_*ght 5 csv python-3.x

我在这里有一些 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)
Run Code Online (Sandbox Code Playgroud)

这段代码几乎按照我想要的方式工作,但除了第一行之外,它无法编辑任何其他行。此代码的输出示例是:

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
Run Code Online (Sandbox Code Playgroud)

然后我将问题定位为另一行,如“blue,42.5,a”行。我的代码无法定位,然后将值“a”更改为“b”。

Jea*_*bre 5

您正在迭代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)
Run Code Online (Sandbox Code Playgroud)

并删除 ,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)
Run Code Online (Sandbox Code Playgroud)