Добавление двух CSV-файлов по столбцам

Предположим, у меня есть два CSV-файла, называемых A и B в Python .

head выглядит так:

  headerNameA1,headerNameA2 1.12412424,1 1,1 1,1 1,1 

head B выглядит так:

  headerNameB1,headerNameB2 1,1 1,1 1,1 1,1 

Моя цель – взять B и добавить его на A чтобы затем A выглядел так:

  headerNameA1,headerNameA2,headerNameB1,headerNameB2 1,1,1.12412424,1 1,1,1,1 1,1,1,1 1,1,1,1 

Из другого вопроса, который я задал, вот код, который возьмет A и B и объединит их в C :

  import csv with open('A','rb') as f1, open('B','rb') as f2, open('out.csv','wb') as w: writer = csv.writer(w) r1,r2 = csv.reader(f1),csv.reader(f2) while True: try: writer.writerow(next(r1)+next(r2)) except StopIteration: break 

Однако цель этого вопроса – просто добавить B на спину A

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

Решение bash, вызванное через os.system , приемлемо

2 Solutions collect form web for “Добавление двух CSV-файлов по столбцам”

Вы могли бы уйти с именованным каналом. У вас запущен процесс Python, который создает канал и открывает его в режиме записи. Затем он выводит на то, что мутированная конкатенация в CSV-файлах столбца (похоже на то, что у вас есть) уже … Когда другой процесс начинает читать этот файл, он сможет потреблять данные, но файл фактически не сохраняется на сервере это просто по требованию. Когда «файл» потребляется, в нем ничего не будет, и любая попытка доступа к нему блокируется до тех пор, пока другой процесс не запишет на другой конец.

Некоторый фиктивный код – потребуется больше продуманной обработки исключений и т. Д. …:

 import os from itertools import izip a = 'abcdef' # File A's rows b = 'ghijkl' # File B's rows outname = 'joined' try: os.unlink(outname) os.mkfifo(outname) except OSError: pass with open(outname, 'w') as fout: for items in izip(a, b): fout.write(''.join(items) + '\n') # Do "real" write here instead... os.unlink(outname) 

Что-то еще открывает этот «файл» в режиме чтения и потребляет его для извлечения данных. Это должно работать, если этот процесс не должен иметь «физические файлы» …

Если вы получите две файловые дескрипторы для одного и того же файла: один в режиме «чтения», один в режиме «обновления» ( r+b ), должна работать одна и та же стратегия.

 from itertools import izip import csv with open('A','rb') as f1, open('B','rb') as f2, open('A','r+b') as w: writer = csv.writer(w) for r1,r2 in izip(csv.reader(f1),csv.reader(f2)): writer.writerow(r1+r2) 

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

  • Если оперативная память не вызывает беспокойства, то читается по очереди быстрее или читает все в ОЗУ и получает к ней доступ? - Python
  • Python командной строки 'входной поток файла'
  • Почему Python быстрее, чем C ++ в этом случае?
  • Могу ли я получить файл socket.make, чтобы иметь такую ​​же семантику чтения, что и обычный файл?
  • Ускорить запись в файлы
  • Удаление строки из файла на месте
  • Используйте случай для низкоуровневых os.open, os.fdopen и друзей?
  • Быстрые варианты сохранения и загрузки для массива numpy
  •  
    Interesting Posts for Van-Lav

    Использование virtualenv с пробелами в пути

    Постоянный объект Python изнутри функции

    UnicodeDecodeError: кодек 'utf8' не может декодировать байт 0xa5 в позиции 0: недопустимый стартовый байт

    Питоническая вставка нескольких значений в список

    python KDE получает контуры и пути в конкретный формат буклета json

    Какие библиотеки клиентов SOAP существуют для Python и где для них имеется документация?

    Явное объявление типа переменной в Python

    Получить случайный ключ: пары значений из словаря в python

    Вызов метода объекта с аргументами в Python

    Отправка последовательной связи с малины pi

    Почему добавление списка Python должно быть однородным?

    Почему нельзя использовать «is» для сравнения чисел?

    Пакет Python устанавливается с помощью pip или easy_install из repos

    Добавление десятизначного целого в список объединяет некоторые записи с символом "L"

    Поиск пакетов, поддерживающих Python 3.x vs. 2.7.x

    Python - лучший язык программирования в мире.