Поиск по блогу

понедельник, 27 января 2014 г.

Как создать структуру папок. Скрипты и правила (соглашения о наименованиях)

Очевидно, что для того, чтобы создать сразу несколько папок с несколькими файлами в них, проще использоват скрипт. Здесь попробуем написать два скрипта, на Питоне... и в командной оболочке Windows.

В предыдущем посте мы окончательно определились со структурой папок. Возьмем вот такую
In []:
# Путь для загрузки файлов с сайта-счетчика
./project/auto/period/month/site/auto.ru/counter/mru/parametrs/2013/Nissan/bymonth-bygender-bypage/

./project/****/period/*****/site/*******/counter/***/parametrs/20**/******/bymonth/
# звездочками обозначены переменные 
# в последней секции записаны параметры скачаных файлов (пока их всего три)
In []:
# Путь для загрузки сцепленых файлов (отличается добавкой "_c" к имени проекта)
./project/auto_c/period/month/site/auto.ru/counter/mru/parametrs/2013/Nissan/bymonth-bygender-bypage/
# Для записи сцепленных файлов испоьзуется та же структура папок, что и при загрузке файлов, 
# суммарные файлы помещаются в соответствующих папках дублерах
# суммарных файлов может быть несколько (подробности см. ниже)
In []:
# Шаблон для имен файлов
_f_catlogue-nissan_y_2013_m_1-2-3-4_g_m-w_a_18-30-45-60_cm_comment_

# _f_  строка фильтра с заменой "/" на "_"
# _y_  год
# _m_  список месяцев через "-"
# _g_  пол  список литералов-строк (m,w)
# _a_  возраст - цифры обозначают верхнюю границу интервала
# _cm_ комментарий - дополнительное поле 

# для парсинга подстроки _m_ используется конструкция  _m_*_
# длина переменной может изменятся
# порядок переменных важен не всегда

Несколько вариантов суммарных файлов

In []:
# Просто состыковали исходные файлы
_f_catlogue-nissan_y_2013_m_1-2-3-4_g_m-w_a_18-30-45-60_cm_raw_
# Состыковали все исходные файлы и добавили столбцы параметров
_f_catlogue-nissan_y_2013_m_1-2-3-4_g_m-w_a_18-30-45-60_cm_comment_
# Распарсили строку URL и добавили справа около десятка столбцов новых параметров
_f_catlogue-nissan_y_2013_m_1-2-3-4_g_m-w_a_18-30-45-60_url-parse_
# Добавили столбцы весов к столбцам параметров (для сравнения разнородных выборок)
_f_catlogue-nissan_y_2013_m_1-2-3-4_g_m-w_a_18-30-45-60_url-parse-weighted_
Выше примеры вариантов. Очевидно, что наиболее используемыми будут второй и третий вариант. Их и возьмем за основу. Взвешиванием займемся позже, а самый первый вариант тоже нежелателен, поскольку добавлять столбцы параметром мы собираемся сразу в процессе состыковки.
Итак, мы (вроде бы) обо всем договорились. Конечно, это не окончательный вариант, но надо начинать пробовать.

Скрипты для создания структуры папок

Сначала используем Список команд Windows ( Windows CMD )
In [13]:
!chcp 65001
!mkdir /?
Active code page: 65001
Creates a directory.

MKDIR [drive:]path
MD [drive:]path

If Command Extensions are enabled MKDIR changes as follows:

MKDIR creates any intermediate directories in the path, if needed.
For example, assume \a does not exist then:

    mkdir \a\b\c\d

is the same as:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

which is what you would have to type if extensions were disabled.

Сначала можно просто создать библиотеку с длинной строкой имени. Все промежуточные библиотеки будут созданы автоматически.
In [9]:
# md = mkdir
!md C:\Users\kiss\Desktop\csv\project\auto_c\period\month\site\auto.ru\counter\mru\parametrs\2013\Nissan\
In [10]:
!dir C:\Users\kiss\Desktop\csv\project\auto_c\period\month\site\auto.ru\counter\mru\parametrs\2013\Nissan\
 Volume in drive C has no label.
 Volume Serial Number is 6017-2A0B

 Directory of C:\Users\kiss\Desktop\csv\project\auto_c\period\month\site\auto.ru\counter\mru\parametrs\2013\Nissan

27.01.2014  19:48    <DIR>          .
27.01.2014  19:48    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  410В 834В 657В 280 bytes free

Позже можно написать простенький .bat файл Командные файлы Windows. Но пока нам достаточно команды dir.

И теперь используем Python (в пути здесь  вместо _c )

In [15]:
import os
newdir='C:\\Users\\kiss\\Desktop\\csv\\project\\auto\\period\\month\\site\\auto.ru\\counter\\mru\\parametrs\\2013\\Nissan'
if not os.path.exists(newdir):
    os.makedirs(newdir)
Как известно, в Python есть бибилиотека os, которая позволяет делать то же самое mkdir -p functionality in python
Кроме того, отметим, что помимо распечатывания директории, мы еще получаем объект списка файлов и подпапок How to list all files of a directory in Python
In [17]:
os.listdir('C:\\Users\\kiss\\Desktop\\csv\\project')
Out[17]:
['auto', 'auto_c']
Мы только что создали всю структуру папок и для скачивания и для итоговых файлов двумя командами. Так что писать скрипты пока незачем.


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий