我在下面的Python脚本中有一个,它从一个位置获取文件并将其复制到另一个目标位置。如果我使用绝对位置定义路径,下面的代码就可以正常工作。
我试图使用变量来定义它,完成后不会执行脚本。没有抛出错误,但代码似乎没有执行。
法典:
Path_from = r'/Users/user/Desktop/report'
Path_to = r'/Users/user/Desktop/report'
for root, dirs, files in os.walk((os.path.normpath(Path_from)), topdown=False):
for name in files:
if name.endswith('{}.txt'.format(date)):
print
"Found"
SourceFolder = os.path.join(root, name)
shutil.copy2(SourceFolder, Path_to)
我想将代码从
Path_from = r'/Users/user/Desktop/report'
自
base_path = /Users/user/Desktop/
Path_from = r'base_path/{}'.format(type)
我建议你将所有当前的工作目录问题留给用户 - 如果他们想指定相对路径,他们可以在调用 python 并提供相对路径之前进入它相关的目录。
这就是几乎每个linux工具和程序所做的 - 它们很少采用"基本路径",而是将提供相对于当前目录(或绝对目录)的有效路径的工作留给用户。
如果您致力于将另一个参数作为相对路径的想法,那么这样做应该非常简单。 您的示例没有有效的 python 语法,但它很接近:
$ cat t.py
from os.path import join
basepath="/tmp"
pathA = "fileA"
pathB = "fileB"
print(join(basepath,pathA))
print(join(basepath,pathB))
但请注意,这会阻止在脚本执行时提供绝对路径。
您可以改用格式,
basepath="/tmp"
pathA = "fileA"
pathB = "fileB"
print( "{}/{}".format(basepath, pathA) )
print( "{}/{}".format(basepath, pathB) )
但是,您假设您知道如何在相关操作系统上加入路径,这就是os.path.join
存在的原因。
如果我没看错,你可以使用pathlib
,特别是pathlib.Path
代码看起来像
from pathlib import Path
import re
import shutil
path_from = Path("/") / "Users" / "user" / "Desktop" # Better IMO
# path_from = Path("/Users/user/Desktop")
path_to = Path("/") / "Users" / "user" / "OtherDesktop"
datename = "whatever"
for x in path_from.glob("*.txt"):
if re.search(r"{}$".format(datename), x.stem): # stem is whatever is before the extension
# ex. something.txt -> something
shutil.copy(str(path_from / x.name), str(path_to / x.name))