Python делает странные несколько каталогов - PullRequest
0 голосов
/ 03 ноября 2018

У меня следующая проблема. Я хочу написать скрипт для автоматического создания структуры папок, определенных внутри текста. Однако следующий код создает странные несколько каталогов, где один каталог заканчивается ?

[centos7@localhost table01]$ ls
01_lay   02_model   03_rig   04_texture   05_shading   references?
01_lay?  02_model?  03_rig?  04_texture?  05_shading?

Извлечение из txt файла, используемого для создания папок:

.
./03_rig
./03_rig/release
./03_rig/working
./05_shading
./05_shading/release
./05_shading/working

Вот код:

import os

#Global Variables
pathToProject = "/run/media/centos7/Data/Programming/Pipeline/SampleProject"
pathToPipeline = "/run/media/centos7/Data/Programming/Pipeline/Pipeline"

allowedTypes = ["asset_character", "asset_prop", "asset_dmp",  "scene", "shot"]

def createFolders(type, name):
    if type in allowedTypes:
        if type == "asset_character":
            pass
        elif type == "asset_prop":
            pathToCreateInside = os.path.join(pathToProject, "03_assets/prop/"+name)
            os.mkdir(pathToCreateInside)
            pathToTxt = os.path.join(pathToPipeline, "create_folders/folder_setups/asset_cg.txt")
            if os.path.isdir(pathToCreateInside) == True and os.path.isfile(pathToTxt) == True:
                makeDirStructure(pathToCreateInside, pathToTxt)
            else:
                print pathToTxt
                print pathToCreateInside
                print "Error: Folder or file does not exist "
        elif type == "asset_dmp":
            pass
        elif type == "scene":
            pass
        elif type == "shot":
            pass

    else:
        print "Only the following foldertypes are accepeted: ", allowedTypes

def makeDirStructure(pathToCreateInside, pathToTxt):
    with open(pathToTxt) as f:
        next(f)
        for path in f:
            try:
                os.makedirs(os.path.join(pathToCreateInside, path[2:]))
            except OSError:
                print ("Creation of the directory %s failed" % path)

createFolders("asset_prop","table01")

Обновление: Текстовый редактор по умолчанию, который поставляется с linux, не отображает пробелы в конце строки, в то время как нано-редактор позволяет мне переходить в своего рода пробелы, подобные позиции (я не использовал Cli редакторы, поэтому я не не знаю, если это особенность, или персонаж действительно существует) ПОЧЕМУ, черт возьми, редактор по умолчанию не показывает эти символы? Это может быть так опасно! Кстати, txt был создан с помощью команды find . -type d > output.txt, что еще более странно для Linux. Любое объяснение?

1 Ответ

0 голосов
/ 03 ноября 2018

Бьюсь об заклад, символ не вопросительный знак, это просто способ ls сказать вам, что есть непечатаемый символ. Рассматриваемый непечатаемый символ - это символ возврата каретки (CR, обычно обозначаемый как \r или \015 или ^M).

Unix использует символ LF (\n, \012, ^J) в качестве ограничителя строки (то есть каждая строка состоит из печатных символов, за которыми следует LF).

Обновление:

Хорошо, я нашел, где вы ошибаетесь, это имя txt-файла. После каждого имени файла вы видите конечный пробел, который, возможно, вызывает ошибку, поскольку у вас не может быть конечного пробела в конце имени папки. Удалите пробелы в конце каждого имени в текстовом файле и посмотрите, как оно работает, или, что еще лучше, используйте строковую функцию strip(), когда вы читаете имена, например. path.strip(). ; )

...