Зачем это нужно?
Копипаст вручную — это, может, и не самый плохой вариант для небольшого количества файлов.
Но представьте, что вам нужно объединить 100+ файлов… готовы ли вы сделать все вручную? Эта затея весьма утомительна и чревата ошибками.
Для файлов с одинаковой структурой таблицы (те же заголовки и количество столбцов) можно воспользоваться скриптом на Python.
Шаг 1: Импортируйте пакеты и задайте рабочую директорию
Измените “/mydir” на нужную вам директорию.
import os
import glob
import pandas as pd
os.chdir("/mydir")
Шаг 2: Воспользуйтесь glob для сопоставления с шаблоном ‘csv’
Сопоставьте шаблон (‘csv’) и сохраните список имен файлов в переменной ‘all_filenames’. Здесь можно почитать о сопоставлении регулярных выражений.
extension = 'csv'
all_filenames = [i for i in glob.glob('*.<>'.format(extension))]
Шаг 3: Объедините файлы в список и экспортируйте в CSV
Воспользуйтесь pandas для объединения файлов в список и экспорта в CSV. На выходе получится файл “combined_csv.csv”. Найти его можно в рабочей директории.
Для экспорта «неанглийских» языков добавляется encoding = ‘utf-8-sig’.
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
Как объединить несколько CSV файлов в один?
Есть несколько CSV файлов, которые я хочу объединить в один. Изначально воспользовался ответом, который предлагает следующее:
import fileinput import glob file_list = glob.glob("*.csv") with open('result.csv', 'w') as file: input_lines = fileinput.input(file_list) file.writelines(input_lines)
Проблема оказалась в том, что при объединении не добавляется перенос строки после очередного файла (т.е. первая строка второго файла оказывается совмещена с последней строкой первого файла). Кроме того, каждый CSV файл имеет заголовок (одинаковый для всех), который хорошо бы убрать у всех фалов, кроме первого. Сейчас объединяю вручную:
with open(target_filename, 'w') as target_file: file_counter = 0 for file_ in files: line_counter = 0 for line in open(file_, 'r'): if line_counter == 0 and file_counter > 0: target_file.write('\r\n') else: target_file.write(line) line_counter += 1 file_counter += 1
Каким образом сделать объединение эффективнее?
Объединить несколько csv в один
В данной заметке ответим на вопрос: как объединить несколько csv в один.
Периодически (не только в жизни тестировщика) бывает есть необходимость в том, чтобы объединить (склеить, соединить) несколько csv файлов (текстовых файлов) в один csv-файл (текстовый txt файл).
Для этого необязательно ставить отдельные программы, утилиты, искать онлайн-сервис по склеиванию, объединению, текстовых csv файлов.
Способ очень простой.
1. Заходим в командную строку (открываем cmd в Windows).
2. Заходим в папку, где лежит несколько csv файлов.
3. Вводим команду copy *.csv out.csv
В результате будут склеены все csv-файлы, находящееся в нашей папке в один склеенный csv-файл.
Вот такая простая команда творит чудеса — решает нашу задачу — объединить (склеить) несколько csv-файлов.
Как еще можно произвести чтение файлов CSV в цикле с использованием pandas, а затем их объединение?
У меня есть 10 файлов csv, с именами data1.csv , data2.csv , data3.csv . data10.csv которые нужно прочитать через библиотеку pandas и соединить в один большой датафрейм.
Как это сделать с помощью цикла?
Я написала следующее:
IN
file_name = ‘data<>.csv’
df_list = []
for i in range(1,11):
df_list.append(pd.read_csv(‘/content/drive/MyDrive/для учебы/booking/’+ file_name.format(i))
На выходе получается ошибка SyntaxError, в чем может быть проблема?
Как это можно было бы сделать по-другому?
Например, в подсказках к задаче мне предлагается сделать список из имеющихся файлов, но я не понимаю к чему он вообще нужен, возможно сделать что-то с применением этого списка:
IN
import pandas as pd
import os as os
files = os.listdir(‘/content/drive/MyDrive/для учебы/booking’) # получаем список наших файлов и сохраняем его в переменную files
OUT
[‘data1.csv’,
‘data2.csv’,
‘data3.csv’,
‘data4.csv’,
‘data5.csv’,
‘data6.csv’,
‘data7.csv’,
‘data8.csv’,
‘data9.csv’,
‘data10.csv’]
- Вопрос задан более двух лет назад
- 231 просмотр