Откройте определенное количество файлов по глобусу

#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. Спасибо за ваше предложение 😀