连接路径和文件名

时间:2016-11-14 19:52:37

标签: python

我必须在python中一起构建完整路径。我试过这个:

filename= "myfile.odt"

subprocess.call(['C:\Program Files (x86)\LibreOffice 5\program\soffice.exe',
                    '--headless',
                    '--convert-to',
                    'pdf', '--outdir',
                    r'C:\Users\A\Desktop\Repo\',
                    r'C:\Users\A\Desktop\Repo\'+filename])

但是我收到了这个错误

  

SyntaxError:扫描字符串文字时的EOL。

6 个答案:

答案 0 :(得分:7)

尝试:

import os
os.path.join('C:\Users\A\Desktop\Repo', filename)

os模块包含许多用于目录和路径操作的有用方法

答案 1 :(得分:3)

反斜杠字符(\)必须以字符串文字进行转义。

  • 这是错误的:'\'
  • 这是正确的:'\\' - 这是一个包含一个反斜杠的字符串

因此,这是错误的:

'C:\Program Files (x86)\LibreOffice 5\program\soffice.exe'

有一招!

前缀为r的字符串文字用于更容易编写正则表达式。它们的一个特性是不必转义反斜杠字符。所以,这没关系:

r'C:\Program Files (x86)\LibreOffice 5\program\soffice.exe'

但是,对于以反斜杠结尾的字符串不起作用:

  • r'\' - 这是语法错误

所以,这也是错误的:

r'C:\Users\A\Desktop\Repo\'

所以,我会做以下事情:

import os
import subprocess


soffice = 'C:\\Program Files (x86)\\LibreOffice 5\\program\\soffice.exe'
outdir = 'C:\\Users\\A\\Desktop\\Repo\\'
full_path = os.path.join(outdir, filename)

subprocess.call([soffice,
                 '--headless',
                 '--convert-to', 'pdf',
                 '--outdir', outdir,
                 full_path])

答案 2 :(得分:2)

要构建zanseb所说的内容,请使用os.path.join,但也是一个转义字符,因此你的字符串文字不能以\结尾,因为它会转义结尾引号。

import os
os.path.join(r'C:\Users\A\Desktop\Repo', filename)

答案 3 :(得分:1)

您遇到的问题是您的原始字符串以单个反斜杠结尾。因为我不明白,这是不允许的。你可以在最后加倍斜杠:

r'C:\Users\A\Desktop\Repo\\'+filename

或使用os.path.join(),这是首选方法:

os.path.join(r'C:\Users\A\Desktop\Repo', filename)

答案 4 :(得分:1)

对于遇到这个问题的其他人,您可以使用\连接一个Path对象和str

path.Path用于与两者 Unix和Windows兼容的路径(您可以使用与使用pathlib.PureWindowsPath相同的方式)。

我使用pathlib.PureWindowsPath的唯一原因是该问题专门询问了Windows路径。

例如:

import pathlib
# PureWindowsPath enforces Windows path style
# for paths that work on both Unix and Windows use path.Path
base_dir = pathlib.PureWindowsPath(r'C:\Program Files (x86)\LibreOffice 5\program')
# elegant path concatenation
myfile = base_dir / "myfile.odt"

print(myfile)
>>> C:\Program Files (x86)\LibreOffice 5\program\myfile.odt

答案 5 :(得分:0)

将库添加到代码中:

from pathlib import Path

当您要获取不带文件名的当前路径时,请使用此方法:

print("Directory Path:", Path().absolute())

现在您只需要在其中添加文件名:例如

   mylink = str(Path().absolute())+"/"+"filename.etc" #str(Path().absolute())+"/"+"hello.txt"

如果通常添加到第一个路径“ r”字符 例如:r“ c:// ...”

您无需在此处执行