Как найти одну и ту же папку на разных машинах в другом каталоге? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть две папки с именами Student и Faculty в каталоге /home/ubuntu/Desktop/Pythontraining.Мне нужно полностью сохранить 10 файлов в папке Student и 3 файла в папке Faculty. Мне нужно сделать то же самое в другой системе, где папки Student и Faculty находятся в другом каталоге (скажем: /home/documents/college). Как сохранить файл в соответствующих папках на двух разных машинах без жесткого указания пути?

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Вы можете использовать библиотеку walk для поиска пути к папке назначения. Лучше всего, если у вас есть только одна папка для каждого поискового имени:

import os

start = "/home/"

for dirpath, dirnames, filenames in os.walk(start):
    found = False
    for dirname in dirnames:
        if dirname == 'Student':
            full_path = os.path.join(dirpath, dirname)
            found = True
            break
    if found:
        break

Выход:

/ дом /.../ Student

0 голосов
/ 10 июля 2019

Для решения этой проблемы у вас есть несколько решений:

Создайте переменную окружения на каждой машине, и внутри скрипта сделайте что-то вроде этого:

import os
student_path = os.environ['STUDENT_PATH']
faculty_path = os.environ['FACULTY_PATH']

print(student_path, faculty_path)

Личное мнение: мне не нравится настраивать мои сценарии с использованием переменных среды, поскольку выбранные вами могут использоваться другим программным обеспечением + отладка всегда грязная


Использовать аргументы

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-s", "--student")
parser.add_argument("-f", "--faculty")

args = parser.parse_args()
student_path = args.student
faculty_path = args.faculty

print(student_path, faculty_path)

А затем назовите ваш сценарий вот так и адаптируйте эту строку в зависимости от машины

python <yourscript> -s <student_path> -f <faculty_path>

Личное мнение: я использую аргументы, когда хочу контролировать небольшое количество параметров в моих скриптах, чтобы изменить его поведение (многословно, nb процессора, ...).


Создайте файл конфигурации и используйте configparser

файл config.ini

[Paths]
student_path=<path_on_machine>
faculty_path=<path_on_machine>

Использование по сценарию:

import configparser

config = configparser.ConfigParser()
config.read('config.ini')
student_path = config.get('Paths', 'student_path')
faculty_path = config.get('Paths', 'faculty_path')

print(student_path, faculty_path)

А затем разверните различные config.ini файлы на каждом компьютере (такие инструменты, как ansible могут помочь вам автоматизировать это)

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


Создать модуль

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

my_config.py

student_path="<path_on_machine>"
faculty_path="<path_on_machine>"

А затем импортировать его

script.py

import my_config

print(my_config.student_path, my_config.faculty_path)

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

...