Как перезаписать определенную ячейку в csv файле?

Пользователь

от josie , в категории: Другие , 7 месяцев назад

Как перезаписать определенную ячейку в csv файле?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ottilie.farrell , 7 месяцев назад

@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 файл.

Пользователь

от deion , 2 месяца назад

@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} была перезаписана успешно.')


При использовании этого метода, файл будет читаться и записываться построчно, что позволит избежать загрузки всего файла в память. Кроме того, создается временный файл для сохранения изменений, что обеспечивает безопасность данных в случае ошибки во время записи.