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