2

我有以下代码:

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
....

即问题在于它os.path.isdir似乎没有认识到它path实际上是一个目录的事实

svn_driveD: svn_repo_path在这种情况下是驱动器号 在这种情况下mysvn relative path是相对于 svn repo 的路径(我通过解析 svn log 的结果获得)

我尝试了转义,而不是转义,许多os.path方法(abspath,,basename等),但似乎没有任何效果:(

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

我还需要在稍后阶段打开文件以通过电子邮件发送它,我得到一个找不到的文件,我猜想从这里开始

完整的功能列表(如果有帮助):

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

更新

这是代码的解决方法版本,但我仍然做不到imghdr.what(filename)filename结果中的文件之一在哪里)

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
4

3 回答 3

1

我没有看到使用的意义,encode但如果它是绝对必须的,那么我建议你通过传递它来进一步条件它的结果os.path.normpath,然后将它扔到os.path.isdir

于 2013-05-08T11:35:34.180 回答
1

我想svn_drive应该D:/不会D:请参阅文档中的这一行:

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

于 2013-05-08T09:40:32.040 回答
0

好的,解决方案来自另一个问题,我不得不在最后去掉 \r ,我确定这是由 path.join 添加的,但 在 windows 上没有 python 文件名

于 2013-05-08T16:56:26.953 回答