Полное руководство по работе c RnDnet
 
×
Меню
Индекс

Загрузка файла произвольного формата

 

Вы можете подавать в граф входную информацию в виде файлов любого формата. Главное, чтобы программный модуль, который будет использовать этот файл, умел его читать.

Ранее мы описали функции встроенной библиотеки bfj, с помощью которых можно читать файлы формата HDF5. Здесь мы рассмотрим, как можно использовать в расчётах файлы любого формата.

 

Вычислительный узел можно рассматривать как «папку», в которой хранятся скрипты. Когда вы запускаете конкретный пакет, то для него создается папка, в которой будет находится сам пакет, а также скрипты узла. Эта папка представляет собой

экземпляр

, в дальнейшем так и будем ее называть. В процессе расчёта программные модули запускаются из этой папки. Если в коде рекурсивно искать вами запущенный файл (пакет), то он обязательно найдется.

 

Рассмотрим это более подробно на примераx чтения .csv и .txt файлов.

 
 

Стоит уточнить, что по умолчанию пакет не будет находиться в папке экземпляра. Но переместится туда, если воспользоваться функцией

bfj.load_inputs()

или

bfj.load_package()

. Как мы описали ранее, функции

bfj.load_inputs()

и

bfj.load_package()

загружают данные пакета(ов), если входной файл формата HDF5. Если файл другого формата, то использование этих функций поместит ваш пакет внутрь папки экземпляра.

Теперь, когда ваш пакет находится в вашем каталоге, достаточно просто его в нём найти. Существует множество способов это сделать, мы рассмотрим два:

 

Пример1. Считывание .csv файла

 

Рассмотрим пример считывания .csv файла, для поиска файла в директории воспользуемся функцией

glob.glob()

. Код скрипта приведён ниже.

 
#!/usr/bin/env python3 # подключение среды Python
import bfj # встроенная библиотека, необходимая для работы с данными на платформе
 
import os # библиотека для работы с операционной системой
from pathlib import Path # библиотека для работы с папками и путями
import glob # библиотека для работы с путями
 
bfj.load_inputs(globals()) # загрузка файла в область видимости скрипта
 
files = glob.glob('**',recursive = True)# возвращает названия всех файлов в директории
print('files', files)
for file in files:
    if file[-4:]=='.csv': # поиск по названию файла формата .csv
      print('true')
      absPath = os.path.abspath(file)# возвращает нормализованный абсолютный путь csv файла
      csvFile = open(absPath)# открывает файл
 

Полученный лог файл после запуска скрипта, представленный ниже, содержит информацию о всех названиях файлов в директории и при найденном файле формата .csv хранит информацию - "true".

 

Пример2. Считывание .txt файла

 

Рассмотрим пример считывания текстового файла. Код скрипта выглядит следующим образом:

 
#!/usr/bin/env python3 # подключение среды Python
import bfj # встроенная библиотека, необходимая для работы с данными на платформе
from pathlib import Path # import библиотеки
 
files={}
for pkg, lbl in bfj.packages():
    bfj.load_package(pkg)
# поиск файла формата .txt в папке "in"
    for i in Path('in', pkg).glob('*.txt'):
    print('true')       
    files[i.name] = i.read_text()
    print('files', files)
 

Как вы могли заметить, во втором примере идет обращение к некой папке in в строке

Path('in', pkg).glob('*.txt')

. Когда вызывается функция

bfj.load_package

(или

bfj.load_inputs

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

 

Лог файл, полученный при запуске скрипта, приведён ниже. Он хранит значение "true", если найден файл формата .txt и выводит словарь "files" с именем файла и его содержанием.

 

Поздравляем с освоением. Будем рады, если раздел был полезен для вас.

 
 
Онлайн помощь создана в Dr.Explain