Как добавить данные в существующие строки файла CSV?

У меня уже есть файл CSV, к которому я обращаюсь, и я хочу добавить данные в первую строку, но он записывает данные в конец файла.

Что я получаю:

enter image description here

Но я хочу, чтобы данные добавлялись следующим образом:

enter image description here

Код, который я сделал до сих пор:

import CSV

with open('explanation.csv' , 'a', newline="") as file:
    myFile = csv.writer(file)
    myFile.writerow(["1"])

Желание записать новые данные в середине файла, но сохранить старые данные — распространенный вопрос новичка. Файлы не похожи на окна редактора, где вы можете просто поместить курсор и начать вставку; вы должны сохранить старые данные в памяти и переписать файл, или записать его в отдельный новый файл.

tripleee 17.05.2022 20:15
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете прочитать весь файл, добавить свои строки в память, а затем записать весь файл:

 def append(fname, data):
        with open(fname) as f:
            reader = csv.reader(f)
            data = list(reader) + list(data)
        with open(fname, 'w') as f:
            writer = csv.writer(f)
            writer.writerows(data)
Ответ принят как подходящий

То, что вы на самом деле хотите сделать, это данные заменять в существующем файле CSV с новыми значениями, однако, чтобы обновить файл CSV, вы должны переписать все это.

Один из способов сделать это — прочитать все это в память, обновить данные, а затем использовать их для перезаписи существующего файла. В качестве альтернативы вы можете обрабатывать файл построчно и сохранять результаты во временном файле, а затем заменять оригинал временным файлом, когда закончите обновлять их все.

Код для последнего показан ниже:

import csv
import os
from pathlib import Path
from tempfile import NamedTemporaryFile


filepath = Path('explanation.csv')  # CSV file to update.

with open(filepath, 'r', newline='') as csv_file, \
     NamedTemporaryFile('w', newline='', dir=filepath.parent, delete=False) as tmp_file:

    reader = csv.reader(csv_file)
    writer = csv.writer(tmp_file)

    # Replace value in the first column of the first 5 rows.
    for data_value in range(1, 6):
        row = next(reader)
        row[0] = data_value
        writer.writerow(row)

    writer.writerows(reader)  # Copy remaining rows of original file.

# Replace original file with updated version.
os.replace(tmp_file.name, filepath)

print('CSV file updated')

Другие вопросы по теме