В облако или нет, слишком большие данные для обработки или слишком мало для включения — часть I

Взаимодействие с операционной системой является стандартной задачей во всех реализациях программного обеспечения.

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

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

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

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

Итак, вам лучше заранее изучить, какие файлы следует перемещать в облако, а какие нет. Дело в том:

1. Отложите обработку больших файлов на потом или займитесь ими по отдельности. Огромные файлы — это выбросы 😊, и вы должны изучить их отдельно, прежде чем отбрасывать.

2. Удалите файлы с нулевыми байтами. Опять же, выброс, который не содержит ничего, поэтому лучше удалить их заранее.

Относится к

· Любая реализация машинного обучения, требующая обхода каталогов или папок.

· Любой проект, требующий индексации атрибутов файла (фрагмент кода генерирует CSV-файл). Вы можете расширить код, включив в него больше атрибутов, которые предлагают прекрасные библиотеки Python.

Пожалуйста, экспериментируйте.

Преимущества

· Надежный набор данных для регулярного потока вашего конвейера данных.

· Меньшая хрупкость кода.

· Журнал файлов доступен. Вам не нужно создавать подклассы или порождать оболочку операционной системы для передачи списка каталогов.

Когда использовать

· Когда вы хотите составить список папок и собрать дополнительные атрибуты.

· Экономьте время обработки в экземпляре облачных вычислений.

· Экономьте место в экземпляре облачного хранилища.

Фрагмент кода

import os
import pandas as pd
import time

# Some data structures to store
username = []
#
filelocation = []
filename = []
filename_length = []
#
fileextension = []
fileextension_length = []
#
filesize = []
filemodified = []
filemodified_dt_tm = []
the_filename = "the_list"
schema = {
    "user_login_name": username,
    "file_path": filelocation,

    "file_name": filename,
    "file_name_len": filename_length,

    "file_ext": fileextension,
    "file_ext_len": fileextension_length,

    "file_mod": filemodified,
    "file_mod_dt_tm": filemodified_dt_tm,
}

# root symbol is added to qualify a root drive
the_location = os.path.splitdrive(os.getcwd())[0] + "/"
# this is a random location to list files, yoy can specify a different folder
the_location = "c:/windows/"
# get the iterator
some_files = os.scandir(the_location)

# get the name of the user logged in
# so you can distinguish the listing across the user accounts
user_name = os.getlogin()
# kept the code in a simple loop for easier reading
with some_files as an_iterator:
    for entry in an_iterator:
        if not entry.name.startswith('.') and entry.is_file():
            full_name = the_location + entry.name
            if os.path.exists(full_name):
                dt_time_stamp = time.ctime(os.path.getmtime(full_name))
                # get the filename
                the_name = str(entry.name).split(".")[0]
                # get the extension
                the_extn = str(entry.name).split(".")[1]
                # add values to the respective lists
                username.append(user_name)
                filelocation.append(the_location)
                filename.append(the_name)
                filename_length.append(len(the_name))

                fileextension.append(the_extn)
                fileextension_length.append(len(the_extn))

                filesize.append(os.path.getsize(full_name))
                filemodified.append(os.path.getmtime(full_name))
                filemodified_dt_tm.append(dt_time_stamp)

df = pd.DataFrame.from_dict(schema)
df.to_csv(the_filename + ".csv", index = False)