使用变量名称的一部分创建目录

时间:2017-06-05 17:41:59

标签: python mkdir os.path

python的新手,我试图创建一组目录,并在每个目录中创建一个文件,输入名称将是一个以>开头的字符串。签名,但我不希望该目录包含>。

我试图做以下事情;

    seq_id = ">seq"
    dirname = seq_id[1:]

    print(dirname)
    if not os.path.isdir('./' + dirname + '/'):
       os.mkdir('./' + dirname + '/')

    print("directory made")

当我使用seq_id [1:]位时它不会创建目录,但它会打印它。所以我不明白为什么它不会创建目录。

我最终想要构建一个函数,该函数将从文件中获取seq_id列表,> seq1> seq2> seq3等,并为每个文件创建一个目录。

(使用python3.5)

1 个答案:

答案 0 :(得分:0)

您必须知道将在当前目录位置创建目录。

如果您位于文件夹/tmp/foo/中,您的脚本位于/tmp/bar/myscript.py,并且您使用python ../bar/myscript.py执行该目录,则会在/tmp/foo/中创建目录,而不是/tmp/bar/

更多的是,因为您只是跳过if not os.path.isdir('./' + dirname + '/'):可能出现的错误并且从不打印任何内容,您将无法知道目录是否已存在。

您可以执行以下操作:

import os

strings = ['>foo', '>bar', '>baz']

def make_directories(input_list):
    for string in input_list:
        dirpath = os.path.join('./', string[1:])
        try:
            os.mkdir(dirpath)
        except FileExistsError:
            print('Directory {} already exists'.format(dirpath))
        else:
            print('Directory {} created'.format(dirpath))

make_directories(strings)
  1. 它使用os.path.join而不是自制连接。这是你应该随时遵循的最佳实践。
  2. 它使用try / except代替if,这也是您应该遵循的最佳做法(Reference
  3. 它打印的东西,所以你知道发生了什么。