Python: «вставить» несколько (неизвестных) csvs вместе

В основном я ищу команду `paste 'в bash, но в Python2. Предположим, у меня есть файл csv:

a1,b1,c1,d1 a2,b2,c2,d2 a3,b3,c3,d3 

И еще один такой:

 e1,f1 e2,f2 e3,f3 

Я хочу объединить их в это:

 a1,b1,c1,d1,e1,f1 a2,b2,c2,d2,e2,f2 a3,b3,c3,d3,e3,f3 

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

Я думаю о том, как использовать zip со списком итераций csv.reader. Будет задействована некоторая распаковка, но похоже, что много python-foo находится выше моего ATM уровня IQ. Может ли кто-нибудь предложить, как реализовать эту идею или что-то совершенно иное?

Я подозреваю, что это должно быть выполнимо с помощью короткого фрагмента. Благодарю.

3 Solutions collect form web for “Python: «вставить» несколько (неизвестных) csvs вместе”

Предполагая, что количество файлов неизвестно, и что все файлы правильно отформатированы, поскольку csv имеют одинаковое количество строк:

 files = ['csv1', 'csv2', 'csv3'] fs = map(open, files) done = False while not done: chunks = [] for f in fs: try: l = next(f).strip() chunks.append(l) except StopIteration: done = True break if not done: print ','.join(chunks) for f in fs: f.close() 

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

 file1 = open("file1.csv", "r") file2 = open("file2.csv", "r") for line in file1: print(line.strip().strip(",") +","+ file2.readline().strip()+"\n") 

Расширяется для как можно большего количества файлов. Просто продолжайте добавлять к заявлению печати. Вместо печати вы также можете добавить список или все, что пожелаете. Возможно, вам придется беспокоиться о длине файлов, но не так, как вы не указали.

Вы можете попробовать панды

В вашем случае группу [a, b, c, d] и [e, f] можно рассматривать как DataFrame в Pandas, и это легко сделать, потому что у Pandas есть функция, называемая concat.

 import pandas as pd # define group [ad] as df1 df1 = pd.read_csv('1.csv') # define group [ef] as df2 df2 = pd.read_csv('2.csv') pd.concat(df1,df2,axis=1) 
  • Почему x, y = zip (* zip (a, b)) работают в Python?
  • Python с расширением ZIP64 при сжатии больших файлов
  • Создавать сплит-архивы (zip, rar, 7z)?
  • Как создать полный сжатый файл tar с помощью Python?
  • Обработка пар значений из двух последовательностей в Clojure
  • Как я могу закрепить содержимое папки с помощью python (версия 2.5)?
  • Разархивировать zip-файлы в python
  • Суммировать соответствующие элементы из нескольких словарей python
  • Создать .zip в Python?
  • Безопасное извлечение zip или tar с помощью Python
  • Мониторинг извлечений файлов ZIP Python
  •  
    Interesting Posts for Van-Lav

    словарь python, сортирующий по убыванию в зависимости от значений

    Избегание перенаправления

    Использование Sql Server с Django в производстве

    Почему len (<a list object>) так медленно?

    Как центрировать окно tkinter и сохранить поведение «подходит для детей»?

    Сохранение файлов из цикла без перезаписи

    Есть ли существенные накладные расходы, используя разные версии ха-хэша (хэшлиб-модуль)

    Что означает «три точки» в Python при индексировании того, что выглядит как число?

    Как запустить сеанс SSH локально с помощью Python?

    Как я могу передать своих местных жителей и получить доступ к переменным непосредственно из другой функции?

    Как мне получить нос, чтобы обнаружить динамически генерируемые тестовые файлы?

    Перестановка массива в 2-D путем указания только размера столбца

    Часовые пояса и локализация

    Оптимизация размеров

    Программные веб-приложения на python без рамки?

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