Мне нужно добавить столбцы в файл 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')
и «добавить» последнюю строку в файл. Есть ли аналогичный вариант добавления столбца?
но даже в этом случае вы должны читать (и записывать) файл дыр, не так ли?
Нет, это невозможно. Я предлагаю вам использовать pandas вместо библиотеки csv для управления вашими данными. Немного излишне, но более интуитивно понятно.
Плохое решение. Переберите каждую строку. Добавьте новое значение. Запишите его либо в новый файл, либо в тот же файл. Лучшее решение — использовать pandas
к сожалению это невозможно. Файлы текстовых файлов представляют собой последовательности, и если вы хотите добавить что-то между ними, вам придется переместить все оставшееся содержимое (и, следовательно, вы должны прочитать и записать его).
Для оригинального 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. Я принял, но не могу проголосовать из-за низкой репутации.
paste
действительно просматривает все содержимое файла, но не читает весь файл вместе в памяти. Он проходит через нее строка за строкой.
awk
илиsed
можно использовать здесь