Python 制作奇怪的多个目录

Python makes strange multiple directories

我有以下问题。我想编写一个脚本,用于在 txt 中定义的自动文件夹结构创建。然而,以下代码创建了奇怪的多个目录,其中一个目录以 ?

结尾
[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 附带的默认文本编辑器不会在行尾显示任何空格,而 nano 编辑器允许我跳转到类似空格的位置(我还没有使用 cli 编辑器,所以我不知道这样做是否是一项功能,或者该角色是否真的存在)为什么默认编辑器不显示这些角色?那可太危险了!顺便说一句,txt 是用命令 find . -type d > output.txt 创建的,这使得 linux 这样做更加奇怪。有什么解释吗?

我敢打赌这个字符不是问号,那只是 ls 告诉您有一个不可打印的字符的方式。有问题的不可打印字符是回车 return 字符(CR,通常表示为 \r5^M)。

Unix 使用 LF 字符(\n2^J)作为行终止符(即每行由其可打印字符和后跟 LF 组成) .

更新:

好的,我发现你出错的地方是 txt 文件的名称。您会看到在文件的每个名称之后,您都有一个尾随的白色-space,这可能是导致错误的原因,因为您不能在文件夹名称的末尾有一个尾随的白色-space。删除 txt 文件中每个名称末尾的白色-spaces,看看它是否有效,或者更好的是,在读取名称的地方使用 strip() 字符串函数,例如。 path.strip();)