Fra*_* E. 83 python windows path-manipulation
我正在尝试学习python并正在制作一个将输出脚本的程序.我想使用os.path.join,但我很困惑.根据文件,如果我说:
os.path.join('c:', 'sourcedir')
Run Code Online (Sandbox Code Playgroud)
我得到"C:sourcedir".根据文档,这是正常的,对吧?
但是当我使用copytree命令时,Python会以所需的方式输出它,例如:
import shutil
src = os.path.join('c:', 'src')
dst = os.path.join('c:', 'dst')
shutil.copytree(src, dst)
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误代码:
WindowsError: [Error 3] The system cannot find the path specified: 'C:src/*.*'
如果我换行os.path.join与os.path.normpath我得到同样的错误.
如果os.path.join不能以这种方式使用,那么我对其目的感到困惑.
根据Stack Overflow建议的页面,不应该在连接中使用斜杠 - 这是正确的,我假设?
And*_*asT 111
为了更加迂腐,最蟒蛇一致的答案将是:
mypath = os.path.join('c:', os.sep, 'sourcedir')
Run Code Online (Sandbox Code Playgroud)
因为你还需要os.sep作为posix根路径:
mypath = os.path.join(os.sep, 'usr', 'lib')
Run Code Online (Sandbox Code Playgroud)
小智 50
Windows对每个驱动器都有一个当前目录的概念.因此,"c:sourcedir"在当前C:目录中表示"sourcedir",您需要指定一个绝对目录.
其中任何一个应该可以工作并给出相同的结果,但我目前还没有启动Windows VM进行双重检查:
"c:/sourcedir"
os.path.join("/", "c:", "sourcedir")
os.path.join("c:/", "sourcedir")
Run Code Online (Sandbox Code Playgroud)
Sma*_*ery 11
原因os.path.join('C:', 'src')是您没有按预期工作,因为您链接到的文档中包含以下内容:
请注意,在Windows上,由于每个驱动器都有一个当前目录,os.path.join("c:","foo")表示相对于驱动器C上当前目录的路径:(c:foo),而不是c :\ FOO.
正如鬼狗所说,你可能想要 mypath=os.path.join('c:\\', 'sourcedir')
Mat*_*all 10
要迂腐,将/或\作为路径分隔符进行硬编码可能并不好.也许这会是最好的?
mypath = os.path.join('c:%s' % os.sep, 'sourcedir')
Run Code Online (Sandbox Code Playgroud)
要么
mypath = os.path.join('c:' + os.sep, 'sourcedir')
Run Code Online (Sandbox Code Playgroud)
对于在Windows和Linux上均可使用的与系统无关的解决方案,无论输入路径如何,都可以使用 os.path.join(os.sep, rootdir + os.sep, targetdir)
在Windows上:
>>> os.path.join(os.sep, "C:" + os.sep, "Windows")
'C:\\Windows'
Run Code Online (Sandbox Code Playgroud)
在Linux上:
>>> os.path.join(os.sep, "usr" + os.sep, "lib")
'/usr/lib'
Run Code Online (Sandbox Code Playgroud)
我会说这是一个(windows)python错误。
为什么要臭虫?
我认为这句话应该是 True
os.path.join(*os.path.dirname(os.path.abspath(__file__)).split(os.path.sep))==os.path.dirname(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)
但这是False在Windows机器上。
要加入 Windows 路径,请尝试
mypath=os.path.join('c:\\', 'sourcedir')
Run Code Online (Sandbox Code Playgroud)
基本上,你需要逃避斜线