当前位置: 首页 > 面试题库 >

Python:如何从不同目录访问文件

贡正诚
2023-03-14
问题内容

我有以下项目结构

SampleProject
     com
       python
          example
             source
                utils
                   ConfigManager.py
     conf
        constants.cfg

如何从ConfigManager.py访问constants.cfg。

我有一个限制

  1. 我无法提供constants.cfg的完整路径(绝对路径),因为如果我在其他PC上运行,则无需进行任何修改
  2. 另外,如果我代表以下内容,则可以访问该文件。但是我不想每次都回击
    filename = ..\\..\\..\\..\\..\\..\\constants.cfg`
    

目前,我正在做这样的事情。但这仅在constants.cfg和ConfigManager.py位于同一目录中时有效

currentDir =  os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
file = open(os.path.join(currentDir,'constants.cfg'))

问题答案:

如果conf是Python软件包,则可以使用pkgutil.get_data()

import pkgutil

data = pkgutil.get_data("conf", "constants.cfg")

或是否setuptools已安装–
pkg_resources.resource_string()

import pkg_resources

data = pkg_resources.resource_string('conf', 'constants.cfg')

如果constants.cfg不在软件包中,则将其路径作为命令行参数传递,或者将其设置为环境变量(例如)CONFIG_MANAGER_CONSTANTS_PATH,或者从一组固定的默认路径(例如)中读取os.path.expanduser("~/.config/ConfigManager/constants.cfg")。要查找放置用户数据的位置,可以使用appdirsmodule。

os.getcwd()如果您可能ConfigManager.py从其他目录运行,则不能使用该函数返回当前工作目录。相对路径"../../..."由于相同的原因而行不通。

如果可以确定ConfigManager.pyconstants.cfg在文件系统中的相对位置不会改变:

import inspect
import os
import sys

def get_my_path():
    try:
        filename = __file__ # where we were when the module was loaded
    except NameError: # fallback
        filename = inspect.getsourcefile(get_my_path)
    return os.path.realpath(filename)

# path to ConfigManager.py
cm_path = get_my_path()
# go 6 directory levels up
sp_path = reduce(lambda x, f: f(x), [os.path.dirname]*6, cm_path)
constants_path = os.path.join(sp_path, "conf", "constants.cfg")


 类似资料:
  • 我在Python 3.3项目中有一个名为/models的目录。 从我的我只是做了一个 在我的: 这在我的应用程序中非常有效。 我有一个依赖于另一个模型的模型,例如在我的我需要导入。py。当我这样做时: 我得到错误。 如何从同一模块/目录中的文件A导入类B?

  • 我在AmazonEC2服务器上有一个WordPress网站,位于/var/www/html/directory。我还想主持另一个网站,可以使用www.domain访问。com/admin。我在WordPress目录中创建了一个文件夹“admin”,但每当我尝试访问这个新网站时,它只会显示WordPress的主网站。我几乎什么都试过了。htaccess文件,但没有运气。 目前,我的root. hta

  • 我试图在根目录外的文件夹中保存一个文件,然后读取它的内容。 例如,我的工作目录是/var/www/html/project_folder,我想将文件保存在/var/www/new_folder中 我使用的是Laravel5.2,所以我的根路径是/var/www/html/project\u folder/public 我已授予新文件夹的所有权限。我尝试了$\u SERVER['DOCUMENT\u

  • 问题内容: 一旦进入另一个目录,我想从一个特定的目录复制多个文件。为了澄清,我想一次执行以下操作(一个命令): 我无法使用, 因为其中有文件 顺便说一句,我正在使用。 谢谢。 问题答案: 或(以Bash格式) 如果文件名不连续,则可以使用

  • 问题内容: 我想将我的JSF 2.0 xhtml文件放在WEB-INF \ jsf下。那我该如何访问它们?我知道WEB- INF中的任何内容都不会暴露给外部,因此我需要一个控制器将我重定向到相应的JSP,对吗?(这也是模型2模式iirc)。 我可以使用web.xml / faces- config.xml中的参数来实现吗?我认为FacesServlet是我的webapp的控制器,因此它应该达到这个

  • 如何进入OpenHarmony的系统目录? 目的是获取设备的获取设备的特权管控白名单文件install_list_capability.json,安装调用了系统级API的APP,把APP包名加入白名单里