连接路径和文件名

Concatenate path and filename

我必须在 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 while scanning string literal.

尝试:

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

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

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

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

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

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

要建立在 zanseb 所说的基础上,请使用 os.path.join,但 \ 也是一个转义字符,因此您的字符串文字不能以 \ 结尾,因为它会转义结束引号。

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

反斜杠字符 (\) 必须在字符串文字中转义。

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

因此,这是错误的:

'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])

对于遇到这个问题的任何其他人,您可以使用 \ 连接 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

将库添加到代码中:

from pathlib import Path

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

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

现在您只需添加文件名即可:例如

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

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

这里不需要做