Python добавляет весь столбец в файл csv, не читая содержимое файла

Мне нужно добавить столбцы в файл csv с помощью Python. Единственный способ, которым я могу это сделать, - это прочитать весь файл, отредактировать каждую строку, чтобы добавить 1 элемент, а затем снова записать в файл. Однако я действительно не хочу делать это таким образом из-за размера файла (более 32000 строк, кажется, много чтения и записи каждый раз, когда я хочу добавить столбец). Я думаю, что даже при использовании модуля csv принцип будет таким же, все прочитайте, отредактируйте и снова напишите.

чтобы было ясно, ниже приведен пример файла csv.

1,2
1,2
1,2
1,2

я хочу добавить третий столбец, чтобы файл стал:

1,2,3
1,2,3
1,2,3
1,2,3

Если бы я хотел добавить целую строку (или строку), я мог бы использовать open(csvfile, 'a') и «добавить» последнюю строку в файл. Есть ли аналогичный вариант добавления столбца?

awk или sed можно использовать здесь
Divyanshu Srivastava 29.05.2019 12:59

но даже в этом случае вы должны читать (и записывать) файл дыр, не так ли?

Raphael 29.05.2019 13:02

Нет, это невозможно. Я предлагаю вам использовать pandas вместо библиотеки csv для управления вашими данными. Немного излишне, но более интуитивно понятно.

BcK 29.05.2019 13:04

Плохое решение. Переберите каждую строку. Добавьте новое значение. Запишите его либо в новый файл, либо в тот же файл. Лучшее решение — использовать pandas

bigbounty 29.05.2019 13:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
550
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ответ принят как подходящий

Для оригинального CSV-файла скажите foo.csv

1,2 
1,2
1,2
1,2

Просто создайте еще один файл, содержащий добавляемый столбец, скажем, bar.csv

3
3
3
3

Затем команду Unix paste можно вызвать из Python, используя os.system как

import os
os.system("paste foo.csv  bar.csv -d ',' > output.csv")

Это дает результат output.csv как

1,2,3
1,2,3
1,2,3
1,2,3

Я думаю, что использование вставки по своей сути подразумевает, что файл будет прочитан для объединения с новым файлом. Однако я думаю, что это лучший ответ! Просто и нет необходимости выполнять какие-либо манипуляции с данными в Python. Я принял, но не могу проголосовать из-за низкой репутации.

LecauseAndThePi 29.05.2019 13:18
paste действительно просматривает все содержимое файла, но не читает весь файл вместе в памяти. Он проходит через нее строка за строкой.
Divyanshu Srivastava 29.05.2019 13:22

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