连接路径和文件名
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://..."
这里不需要做
我必须在 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://..."
这里不需要做