Python 当给定指向实际现有目录的路径时,os.path.isdir不返回True

Python 当给定指向实际现有目录的路径时,os.path.isdir不返回True,python,os.path,Python,Os.path,我有以下代码: path = os.path.join(svn_drive, svn_repo_path, relative_path) if os.path.isdir(path.encode('string-escape')): print path, " is a directory" else: print path, " is not a directory" 其结果如下: D:

我有以下代码:

path = os.path.join(svn_drive, svn_repo_path, relative_path)
if os.path.isdir(path.encode('string-escape')):             
            print path, " is  a directory"
else:               
            print path, " is not a directory"
其结果如下:

D:\mysvn\trunk\Assets\myfile.max  is not a directory    
D:\mysvn\\Animations  is not a directory
....
i、 问题是,
os.path.isdir
似乎没有意识到
path
实际上是一个目录

svn\u drive
是本例中的驱动器号
D:
svn\u repo\u路径在本例中为
mysvn
相对路径
是相对于svn回购的路径(我通过解析svn日志的结果获得)

我尝试了转义,而不是转义,许多
os.path
方法(
abspath
basename
,等等)似乎都不起作用:(

我也接受其他选择;),我只想知道路径,然后通过电子邮件发送文件,不介意如何发送(我知道有时人们希望保留他们的代码,但这只是一个独立的脚本)

我还需要在稍后阶段打开该文件以发送电子邮件,我会收到一个未找到的文件,我将从这里开始猜测

完整函数列表(如果有帮助):

更新

这是代码的变通版本,但我仍然无法执行
imghdr。什么(文件名)
(其中
filename
是结果中的文件之一)


我认为
svn\u-drive
应该是
D://
而不是
D:
。请参见中的这一行:

请注意,在Windows上,由于每个驱动器都有一个当前目录,因此os.path.join(“c:,“foo”)表示相对于驱动器c:(c:foo)上当前目录的路径,而不是c:\foo


我认为使用
encode
没有任何意义,但如果它是绝对必须的,那么我建议您通过
os.path.normpath
将其传递给
os.path.isdir

进一步调整其结果,然后将其扔到
os.path.isdir

好的,解决方案来自另一个问题,我必须在最后剥离\r,我确信这是由path.join添加的,但是没有
什么是
svn\u驱动器
svn\u repo\u路径
相对路径
。它们是如何产生的?为什么要使用
.encode()
?用该信息更新了问题我使用encode是因为我在REPL中尝试了相同的事情,并且成功了(即isdir返回true)请引用任何
临时路径
路径
的值pairI刚刚尝试过,没有产生任何影响。我还尝试在REPL和os.path中运行它。join('D:',os.sep,'whatever')是唯一返回有效路径的东西:>>>os.path.join('D:','mypath')'D:mypath'>>>os.path.join('D:\','mypath')文件“”,第1行os.path.join('D:\','mypath')^SyntaxError:无效语法>>os.path.join('D:\\,'mypath')文件“”,第1行os.path.join('D:\\,'mypath')^SyntaxError:无效语法>>>os.path.join('D:',os.sep,'mypath')'D:\\mypath'很抱歉,我在这台机器上没有虚拟机,os.path.join('D:/','whatever'))工作?不用担心,我试过REPL,它返回'D:/mypath',然后我试过上面的脚本,同样的(dir不被识别):D:/mysvn\trunk\TexturePacker不是一个目录一件奇怪的事情,如果我在REPL os.path.isdir上执行以下操作(“D:/mysvn\TexturePacker.encode('string-escape')),则返回true(目录当然存在)但是,使用python脚本运行同一行返回False我在删除encode时没有问题,当我删除encode时,我得到相同的行为。有点不相关,但甚至尝试imghdr.what(os.path.normpath(filename))或imghdr.what(filename)或encoded它们都会给我一个IO错误(我已经验证了文件是否存在)在类似的情况下,
print
ing正在传递的变量在调试时通常是一个非常有用的练习。请详细说明答案并将其标记为已回答。谢谢回答。顺便说一句,我确实使用了print,但我愚蠢地(?)认为os.path.normpath可能会失败,或者处理它看起来不像路径的事实,然后修复它。
help
非常方便快速查找。只需
help(os.path.normpath)
。另外,您可以使用
op=os.path
来节省一些输入。请点击评论框右下角的“帮助”链接,获取一些快速格式化的小贴士。它们使阅读文章更容易,类似于缩进,使读写代码更容易。感谢所有提示,非常感谢:D
def parse_svn_results(lines, svn_drive, svn_repo_path): 
    result = []
    for x in lines.split("\n"):
        if  "trunk/" in x:
            relative_path = x.lstrip('MDA ').replace("/","",1).replace("/", os.sep)
            path = os.path.join(svn_drive, svn_repo_path, relative_path)
            if os.path.isdir(path.encode('string-escape')):             
                print path, " is  a directory"
            else:               
                print path, " is not a directory"
                result.append(path)
    return result
def parse_svn_results(lines, svn_drive, svn_repo_path):
    result = []
    for x in lines.split("\n"):
        if "trunk/" in x:
            relative_path = x.lstrip('MDA ').replace("/", "", 1).replace("/", os.sep)
            temp_path = os.path.join(svn_drive, os.sep, svn_repo_path, relative_path)
            path = format_path(temp_path)
            if path is not None:
                result.append(path)
    return result


def format_path(file_destination):
    file_name = os.path.basename(file_destination)
    path = os.path.dirname(file_destination)
    base, ext = os.path.splitext(file_name)
    picture_format = None
    e = ext if picture_format is None else '.%s' % picture_format.lower()
    if e:
        to_path = os.path.join(path, base + e)
        return to_path