如何在不同目录的不同计算机上找到同一文件夹?

时间:2019-07-10 12:38:23

标签: python file directory hard-coding

我在目录public static final String DATABASE_PATH=Environment.getExternalStorageDirectory().getAbsolutePath()+"/WebService/Databases/"; private static final String DATABASE_NAME="database_name.db"; SQLiteDatabase db=SQLiteDatabase.openDatabase(DATABASE_PATH+DATABASE_NAME,null,SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.OPEN_READWRITE); 中有两个名为StudentFaculty的文件夹。我需要在/home/ubuntu/Desktop/Pythontraining文件夹中总共保存10个文件,在Student文件夹中总共保存3个文件。我需要在另一个FacultyStudent文件夹所在的系统中执行相同的操作出现在不同的目录中(例如:Faculty)。如何在不对路径进行硬编码的情况下将文件存储到两台不同计算机上的相应文件夹中?

2 个答案:

答案 0 :(得分:0)

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

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

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

print(student_path, faculty_path)
  

个人观点:我不喜欢使用环境变量配置脚本,因为您选择的脚本可能会被其他软件使用+调试总是很麻烦


使用arguments

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之类的工具可以帮助您实现自动化)

  

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


创建模块

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

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)
  

我对配置文件和配置模块没有任何个人看法。如果您想比较一些内容,请阅读this

答案 1 :(得分: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 /.../学生