#python #pandas
Вопрос:
Я пытаюсь использовать glob
для открытия файла excel в одной папке, а затем concat
их в 1 файл, но для открытия всех файлов и последующего объединения требуется довольно много времени (каждый файл содержит около 20000 строк).
Поэтому я хотел бы спросить, можно ли в любом случае открыть определенное количество файлов с помощью glob? Пример: Последние 30 файлов во всех файлах. Или есть другой способ сделать это
Спасибо и с наилучшими пожеланиями
Ответ №1:
Или есть другой способ сделать это
Обычно я справляюсь с этим, используя метод ОС listdir
для перечисления всех доступных файлов в заданном каталоге (например path_to_files
), затем открываю их с помощью pandas read_csv
или read_excel
метода и добавляю их в a list_of_dataframes
для объединения:
import os import pandas as pd from pathlib import Path path_to_files = Path('...') #The path to the folder containing your excel files list_of_dataframes = [] for myfile in os.listdir(path_to_files): pathtomyfile = path_to_files / myfile list_of_dataframes.append(pd.read_csv(pathtomyfile)) df=pd.concat(list_of_dataframes)
Количество загружаемых файлов можно указать путем индексирования, например, для последних 30 файлов:
for myfile in os.listdir(path_to_files)[-30:]
Ответ №2:
Я использовал этот код для объединения файлов mp4, но, конечно, вы могли бы использовать его с другими файлами
from glob import iglob def enumerate_files(source: str, ext: str = "*") -> Iterator[str]: """Enumerate and scan the files from folder by given extension""" return iglob(os.path.join(source, f"*.{ext}")) def combine_files(source: str, output: str,ext: str = "mp4") -> None: folder = join(os.getcwd(), source) with open(output, "wb") as wb: for file in enumerate_files(folder, ext): with open(file, "rb") as fd: shutil.copyfileobj(fd, wb)
Комментарии:
1. Спасибо за ваше предложение 😀
Ответ №3:
Если существует определенное соглашение об именовании, вы можете выбрать файлы, которые отвечают только определенным требованиям? как:
list_of_files = glob.glob('*criteria*)
или вы могли бы получить список, а затем разделить список файлов на n подмножеств?
list_of_files = glob.glob('*xlx') length = len(listfiles) center = length//2 a = listfiles[:center] b = listfiles[center:]
Комментарии:
1. Спасибо за ваше предложение 😀