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
,通常表示为 \r
或 5
或 ^M
)。
Unix 使用 LF
字符(\n
、2
、^J
)作为行终止符(即每行由其可打印字符和后跟 LF 组成) .
更新:
好的,我发现你出错的地方是 txt 文件的名称。您会看到在文件的每个名称之后,您都有一个尾随的白色-space,这可能是导致错误的原因,因为您不能在文件夹名称的末尾有一个尾随的白色-space。删除 txt 文件中每个名称末尾的白色-spaces,看看它是否有效,或者更好的是,在读取名称的地方使用 strip()
字符串函数,例如。 path.strip()
。 ;)
我有以下问题。我想编写一个脚本,用于在 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
,通常表示为 \r
或 5
或 ^M
)。
Unix 使用 LF
字符(\n
、2
、^J
)作为行终止符(即每行由其可打印字符和后跟 LF 组成) .
更新:
好的,我发现你出错的地方是 txt 文件的名称。您会看到在文件的每个名称之后,您都有一个尾随的白色-space,这可能是导致错误的原因,因为您不能在文件夹名称的末尾有一个尾随的白色-space。删除 txt 文件中每个名称末尾的白色-spaces,看看它是否有效,或者更好的是,在读取名称的地方使用 strip()
字符串函数,例如。 path.strip()
。 ;)