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) 
Interesting Posts

Python Multiprocessing atexit Ошибка «Ошибка в atexit._run_exitfuncs»

Eclipse + PyDev: Eclipse говорит мне, что это недопустимый импорт?

как вы находите последний столбец или строку в таблице Excel с использованием python pandas

Получение доступности от datepicker за x месяцев для сайта

сортировка списка списков и получение индексов в несортированном списке

Центрирование объекта в Киви

Scipy: позволяют ли разреженные матрицы поддерживать расширенную индексацию?

Как вы загружаете файл с запросом POST на django-tastypie?

Группа Pandas DataFrame MultiIndex, работающая по прокату с отсутствующими датами

Невозможно установить psycopg2 с помощью pip в virtualenv на Mac OS X 10.7

Как предоставить фокус диалога файла Tkinter

Сюжеты, сделанные с rpy, отправленные на X11, внезапно закрываются?

Как связать несколько аргументов в python? add (1) (2) (3) = 6

Как установить границы в pygame?

Есть ли модуль python для решения линейных уравнений?

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