我有以下代码:
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_drive
是本案例中的驱动器号D:
在这种情况下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
答案 0 :(得分:1)
我认为svn_drive
应为D:/
而不是D:
。请参阅documentation:
请注意,在Windows上,由于每个驱动器都有一个当前目录,os.path.join(“c:”,“foo”)表示相对于驱动器C上当前目录的路径:(c:foo) ,而不是c:\ foo。
答案 1 :(得分:1)
我没有看到使用encode
的重点,但如果它是绝对的必须,那么我建议你通过传递os.path.normpath
进一步调整结果,然后将其扔到os.path.isdir
}
答案 2 :(得分:0)
好的,解决方案来自另一个问题,我不得不在最后删除\ r \ n,我确信这是由path.join添加但不是 python filename on windows