目前我不明白,为什么蟒蛇os.path.dirname
表现得像它一样。
我们假设我有以下脚本:
# Not part of the script, just for the current sample
__file__ = 'C:\\Python\\Test\\test.py'
然后我尝试获取以下目录的绝对路径:C:\\Python\\doc\\py
使用此代码:
base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)) + '\\..\\doc\\py\\')
但为什么方法os.path.dirname
无法解析路径并打印出来(print (base_path)
:
C:\ Python的\测试\ .. \ DOC \吡啶
我期望该方法解析路径:
C:\ Python的\测试\ DOC \吡啶
我只是从.NET Framework了解这种行为,获取目录路径将始终解析完整路径并使用..\\
删除目录更改。我有什么在Python中有可能做到这一点?
答案 0 :(得分:2)
通过折叠冗余分隔符和上级引用来规范化路径名,以便A // B,A / B /,A /./ B和A / foo /../ B都变为A / B.此字符串操作可能会更改包含符号链接的路径的含义。在Windows上,它将正斜杠转换为反斜杠。
private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
@Override
protected Void doInBackground(byte[]... data) {
FileOutputStream outStream = null;
// Write to SD Card
try {
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/Name");
dir.mkdirs();
String fileName = "Any Name"
File outFile = new File(dir, fileName);
outStream = new FileOutputStream(outFile);
outStream.write(data[0]);
outStream.flush();
outStream.close();
refreshGallery(outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return null;
}
}
的工作原理是因为它不是很聪明 - 它甚至适用于网址!
os.path.dirname
它只是在最后一次斜线后切掉任何东西。在最后一个斜线之前它没有查看任何内容,所以如果你在某处有os.path.dirname("http://www.google.com/test") # outputs http://www.google.com
它就不在乎。
答案 1 :(得分:1)
os.path.normpath()
将返回一个规范化路径,并删除或替换当前或父目录的所有引用。