繁体   English   中英

在Python中调用相对路径

[英]Calling for relative paths in Python

我在Python脚本下面有这个脚本,该脚本从一个位置获取文件并将其复制到另一个Target位置。 如果我使用绝对位置定义路径,则以下代码可以正常工作。

我试图使用变量来定义它,完成时不执行脚本。 没有引发任何错误,但似乎未执行该代码。

码:

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 ,特别是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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM