Добавление двух 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 требуют специальной обработки для спецификации UTF-8?
  • использование строк чтения дважды в строке в Python
  • IOError при записи в файл на Python
  • Чтение данных, полученных из файла FORTRAN90, в массив NUMPY
  • Двоичный поиск по огромному файлу с неизвестной длиной строки
  • Скорость обработки файлов python 3.3 по сравнению с fortran 77
  • Почему «повышение IOError (« невозможно определить файл образа »)« показывается только часть времени?
  • Как я могу удалить повторяющиеся строки из файла?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.