0

我在目录中有两个名为和 的Student文件夹。我需要在文件夹内保存总共 10 个文件,在文件夹内保存 3 个文件。我需要在另一个系统中执行相同操作,其中和文件夹位于不同的目录中(例如:)。如何将文件存储到两个文件夹中没有硬编码路径的不同机器?Faculty/home/ubuntu/Desktop/PythontrainingStudentFacultyStudentFaculty/home/documents/college

4

2 回答 2

0

您可以使用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

输出:

/home/.../学生

于 2019-07-11T06:01:22.227 回答
0

对于此类问题,您有多种解决方案:

在每台机器上创建环境变量,并在脚本内部执行以下操作:

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>

个人意见:当我想控制脚本上的少量参数以改变其行为(详细,cpus 的 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这样的工具可以帮助你自动化)

个人意见:我在新机器上部署时需要调整参数时使用配置文件。我不喜欢为此目的使用参数,因为我不想在每次使用我的脚本时都指定相同的值(通常这些类型的参数没有好的默认值)。


创建一个模块

您还可以创建一个模块来存储这些参数而不是配置文件。

我的配置文件

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

然后导入

脚本.py

import my_config

print(my_config.student_path, my_config.faculty_path)

我对配置文件和配置模块没有任何个人意见。如果您想要一些比较元素,请阅读此内容。

于 2019-07-10T13:37:13.243 回答