【问题标题】:Reading file from one up directory in python2.7从python2.7中的一个目录读取文件
【发布时间】:2020-01-12 17:22:15
【问题描述】:

我正在尝试从上一级读取 python 脚本中的文件。 我的文件结构如下:

code
 - scripts
     -myscript.py
 - .env

在 .env 中我有我的配置。

我正在尝试在 myscript.py 中读取此文件

我做了以下阅读:

  envfile = open("../.env", "r")

现在,当我从脚本目录运行这个 python 脚本时,它工作正常

这很好用:

cd /var/www/html/code/scripts
python myscript.py

但如果我这样做:

cd
python /var/www/html/code/scripts/myscript.py

不起作用并给出 IOError: [Errno 2] No such file or directory: '../.env'

如果我在终端中传递绝对或相对路径,如何让它运行?

【问题讨论】:

  • 光盘在做什么
  • 您从不同的路径运行它,即从您的 cwd 升级的级别不是 .env 的级别

标签: python bash python-2.7


【解决方案1】:

你可以使用pathlib2:

    from pathlib import Path

    path = Path(__file__).resolve().parents[1].joinpath(".env")
    envfile = open(path)

【讨论】:

  • 非常适合 Python 3 的问题,可能不如 Python 2.7 好
【解决方案2】:
import os
p = os.path.realpath(__file__)
envfile = open('/'.join(p.split('/')[:-1])+'/../.env')

也可以

【讨论】:

  • 可能无法在 Windows 上运行,但我怀疑 99.9% 的阅读者不会在意。 Olvin 的方法似乎适用于任何平台(由 Path 支持)。
  • 什么是 OP?我是否需要更改我的评论,以表示 100% 的阅读者不会在意 :)?
  • 原创海报
  • 很奇怪的解决方案。如果您想使用str.join 并削减部分路径,为什么不这样做:envfile = open('/'.join(p.split('/')[:-2] + ['.env']))
  • 是的,可以采用稍微不同的方法。为什么切断您需要的路径部分会很奇怪?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多