Python os.path.dirname在更改目录时返回意外路径

时间:2015-12-28 07:36:47

标签: python path operating-system dirname

目前我不明白,为什么蟒蛇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中有可能做到这一点?

2 个答案:

答案 0 :(得分:2)

查看os.path.normpath

  

通过折叠冗余分隔符和上级引用来规范化路径名,以便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()将返回一个规范化路径,并删除或替换当前或父目录的所有引用。