使用getopt()获取从命令lin传递的值

2024-09-30 12:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python脚本来为给定的学期和课程创建目录。我希望使用Python模块os、sys和getopt(同时提供short和long form选项),以便运行脚本如下所示:

>python directory.py –t fall2013 –c cs311-400 
>python directory.py –-term fall2013 –-class cs311-400

我现在编写的代码如下所示:

^{pr2}$

在这之后,我有了一个函数,它接受an使用的术语和过程操作系统.mkdir这样:

def make_folders(term, course):
    if not os.path.isdir(term + course):
        os.mkdir(term + course)
        path = os.path.join(term + course, "assignments")
        os.makedirs(path)

        path = os.path.join(term + course, "examples")
        os.makedirs(path)

        path = os.path.join(term + course, "exams")
        os.makedirs(path)

        path = os.path.join(term + course, "lecture_notes")
        os.makedirs(path)

        path = os.path.join(term + course, "submissions")
        os.makedirs(path)

make_folders(term, course)

由于某些原因,生成的文件夹只有一个表示术语的名称,而不是同时表示术语和课程的名称。我觉得这可能和我使用getopt有关,但我不确定。有什么建议吗?


Tags: pathpy脚本osdirectory课程术语join
3条回答

实际上我在你们班,至少我几乎可以肯定我是。遇到了这个问题,在获取子目录时遇到了困难。我在谷歌上搜索到了这里!好吧,经过几次谷歌搜索和大量的故障排除,找到了我们问题的答案!在

os.makedirs(''+term+'/'+course+'')      
path = os.path.join(''+term+'/'+course+'', "exams")
os.makedirs(path)

这应该为你清理,并给你的新目录和子目录!祝你顺利完成剩下的任务。在

os.path.join是一个聪明的函数。只需传递所需的任意多个文件夹:

>>> import os
>>> os.path.join("first", "second", "third")
'first/second/third'

当您编写term + course时,Python直接连接term和{}中的字符串,直到os.path.join()看到它们。也就是说,如果term == "fall2013"和{},那么{}之间没有任何东西。在

一种解决方法是在术语和课程之间插入一个显式的斜杠,如term + "/" + course。但是,由于您可能已经被指示使用^{}(无论如何,这是一个好主意),您只需将要连接到它的路径组件作为单独的参数传递给所有,并让它为您负责连接它们:

path = os.path.join(term, course, "exams")

另外,对于你的作业,以及对好的Python编码的一些建议:

  • 虽然^{}模块实际上并不像注释中的rtrwalker声明那样被弃用,但是使用^{}可能会更好,除非出于某种原因(比如说,赋值告诉您)使用getopt

  • 你的代码看起来很重复。重复代码是一个"smell",它应该表示需要一个循环,可能如下所示:

    dirs = ("assignments", "examples", "exams", "lecture_notes", "submissions")
    for folder in dirs:
        path = os.path.join(term, course, folder)
        os.makedirs(path)
    

相关问题 更多 >

    热门问题