@josie
Для перезаписи определенной ячейки в csv файле вы можете использовать следующий код на Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import csv
filename = 'file.csv' # имя csv файла
row_number = 3 # номер строки
column_number = 2 # номер столбца
new_value = 'новое значение' # новое значение ячейки
# Открываем csv файл для чтения и записи
with open(filename, 'r') as file:
reader = csv.reader(file)
lines = list(reader) # Преобразуем содержимое csv файла в список
# Обновляем значение нужной ячейки
lines[row_number-1][column_number-1] = new_value
# Открываем csv файл для записи и перезаписываем в него значения
with open(filename, 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(lines)
print(f'Ячейка в строке {row_number} и столбце {column_number} была перезаписана успешно.')
|
Нужно указать имя csv файла в переменной filename, номер строки в переменной row_number, номер столбца в переменной column_number и новое значение ячейки в переменной new_value. Затем программа открывает файл для чтения, загружает его содержимое в список, обновляет значение нужной ячейки и перезаписывает список обратно в csv файл.
@josie
Пример предоставленного кода работает, но предоставленный способ может быть неэффективным для больших файлов CSV, поскольку он загружает весь файл в память одновременно. Вместо этого, вы можете использовать следующий код, который позволяет перезаписать только определенную ячейку без загрузки всего файла в память:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import csv
filename = 'file.csv' # имя csv файла
row_number = 3 # номер строки
column_number = 2 # номер столбца
new_value = 'новое значение' # новое значение ячейки
# Функция для изменения значения ячейки в CSV файле
def update_csv_cell(filename, row_number, column_number, new_value):
# Открываем csv файл для чтения и создаем временный файл
with open(filename, 'r', newline='') as file, open('temp.csv', 'w', newline='') as temp_file:
reader = csv.reader(file)
writer = csv.writer(temp_file)
for i, row in enumerate(reader):
if i == row_number - 1:
if len(row) >= column_number:
row[column_number - 1] = new_value
writer.writerow(row)
# Заменяем исходный файл временным файлом
import os
os.remove(filename)
os.rename('temp.csv', filename)
update_csv_cell(filename, row_number, column_number, new_value)
print(f'Ячейка в строке {row_number} и столбце {column_number} была перезаписана успешно.')
|
При использовании этого метода, файл будет читаться и записываться построчно, что позволит избежать загрузки всего файла в память. Кроме того, создается временный файл для сохранения изменений, что обеспечивает безопасность данных в случае ошибки во время записи.