我是编写Python的一个菜鸟,我遇到了一些谷歌搜索没有帮助我的东西。 我试图编写一个简单的目录列表工具,我似乎无法处理OSX中目录名中的Spaces。 我的代码如下:
def listdir_nohidden(path):
import os
for f in os.listdir(path):
if not f.startswith('.'):
yield f
def MACListDirNoExt():
import os
MACu = PCu = os.environ['USER']
MACDIR = '/Users/'+MACu+'/Desktop//'
while True:
PATH = raw_input("What is the PATH you would like to list?")
if os.path.exists(PATH):
break
else:
print "That PATH cannot be found or does not exist."
NAME = raw_input ("What would you like to name your file?")
DIR = listdir_nohidden(PATH)
DIR = [os.path.splitext(x)[0] for x in DIR]
f = open(''+MACDIR+NAME+'.txt', "w")
for file in DIR:
f.write(str(file) + "\n")
f.close()
print "The file %s.txt has been written to your Desktop" % (NAME)
raw_input ("Press Enter to exit")
为了便于解决问题,我认为这可以归结为:
import os
PATH = raw_input("What is the PATH you would like to list")
os.listdir(PATH)
当提供包含空格/卷/磁盘/的目录路径时,这是它返回的文件夹
"没有此类文件或目录:' / Volumes / Disk / this \\是\\ a \\ folder /'
看起来它逃脱逃跑......?
答案 0 :(得分:0)
检查raw_input()返回的值是否出现'\\',并用''替换它们。
a = a.replace('\\', '')
答案 1 :(得分:0)
我刚刚碰到这个,我猜我匆匆做的事也是你的尝试。在某种程度上,@ zwol和@ trans1st0r都是正确的。
你的简化程序没有任何问题。我相信如果你输入输入/Volumes/Disk/this is a folder
,一切都会正常工作。
但是,您可能正在做的事情(或者至少我正在做的事情)是将文件夹从Finder拖到终端。当您拖动到终端时,操作系统会自动为您转义空格,因此最终输入终端的内容为/Volumes/Disk/this\ is\ a\ folder
。
所以要么你可以确保你输入的内容&#34;没有这些反斜杠,或者您可以使用@ trans1st0r的建议作为支持拖动功能的方法,尽管后者会在边缘情况下导致问题,即您所需的路径实际上有反斜杠。< / p>