首页 > 解决方案 > shutil.copy 是否识别波浪号 (~) 字符,是否有替代 shutil.copy 识别的波浪号的替代方法?

问题描述

我正在尝试构建一个简单的 python 工具,它可以根据命令为我生成一些 HTML 模板。我正在尝试使其通用,我基本上只是希望它将位于某个目录中的三个文件复制到当前目录中。当我尝试抓取文件时,我使用 shutil.copy('~/tools/HTML_tools/[files])。虽然我不断收到错误,但似乎 shutil.copy 无法识别波浪号(~)字符,但我不确定。

我希望我的程序可以从任何目录运行。我在 .bashrc 中创建了一个别名来运行它。

别名 genHTML='python3 ~/tools/genHTML/genHTML.py'

我尝试改用 shutil.copy('/home/' + USER + '/tools/HTML_tools/[files]'),其中 USER 是存储在文本文件 user.txt 中的字符串。这也不起作用,因为打开 USER 文件也将依赖于波浪号字符,因为它也处于固定位置。

from shutil import copy

if __name__ == '__main__':

    try:
        copy('~/tools/HTML_tools/template.html', './')
        copy('~/tools/HTML_tools/styles.css', './')
        copy('~/tools/HTML_tools/script.js', './')
    except IOError:
        print('It appears something went wrong.')

我希望此文件将文件 template.html、styles.css 和 script.js 复制到当前目录中。相反,我得到一个 FileNotFoundError 说 ~/tools/HTML_tools/[files] 不存在。

标签: pythonpython-3.xshutil

解决方案


你想在打电话expanduser()之前打电话copy()

from shutil import copy
import os

tools_dir = os.path.expanduser('~/tools/HTML_tools')
copy(os.path.join(tools_dir, 'template.html'), '.')

推荐阅读