#python-3.x #csv
#python-3.x #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
проблема, с которой я сталкиваюсь, заключается в том, что она нацелена на другую строку, такую как строка ‘blue, 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)
Комментарии:
1. Я пытался сделать это изначально, но я получаю эту ошибку: ‘если строка [3] == ‘r’: IndexError: индекс списка вне диапазона’
2. обратите внимание, что ‘r’ в строке ‘if[3] == ‘r’ ‘. Я изменил свой код, чтобы отразить ‘r’ вместо ‘a’
3. У вас должны быть пустые строки. Я добавил проверку длины в строке.
4. на самом деле, я только что попробовал верхний код, который вы туда вставили. теперь это работает, большое вам спасибо