在python中读取资源文件

时间:2019-03-14 22:45:41

标签: python

我是一名Java开发人员,后来成为python开发人员。如何在python中读取类路径资源文件

这是我的目录结构

.
├── resources
│   ├── #test_schema.xml#
│   ├── create_confd_serialized_objects.sql
│   ├── create_notifications.txt
│   ├── create_notifications2.txt
│   ├── credentials.json
│   ├── delete_notifications.txt
│   ├── ngena-sa.xml
│   ├── ngena-sa.yang
│   ├── ngena-sa.yang~
│   ├── ngena-sa_v0.6.uml
│   ├── notification.txt
│   ├── notification.txt~
│   ├── requirements.txt
│   ├── test_schema.xml
│   └── test_schema.xml~
├── src
│   ├── ConfdAlertHandler.py
│   ├── ConfdAlertHandler.pyc
│   ├── ConfdAlertHandler.py~
│   ├── DataBaseManager.py
│   ├── DataBaseManager.pyc
│   ├── DataBaseManager.py~
│   ├── OUTPUT
│   ├── Record.py
│   ├── Record.py~
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── ConfdAlertHandler.cpython-37.pyc
│   │   ├── DataBaseManager.cpython-37.pyc
│   │   └── socket.cpython-37.pyc
│   ├── listener.py
│   ├── ngena_sa_create.sql
│   ├── ngena_sa_create.sql~
│   ├── output.xml
│   ├── server.py
│   ├── server.py~
│   ├── watcher.py
│   └── watcher.py~

当前,我们正在如下加载文件。是否有更好的方法或最佳实践来读取资源文件。

Record.py

class Record:

    def __init__(self, yang_path=None, json_path=None, xml_path=None,jsonData=None, xmlStr=None):

        self.xmlStr = xmlStr
        self.yang_path = yang_path
        self.xml_path = xml_path
        self.json_path = json_path
        self.tables = []
        self.module_name = ''
        self.connections = []
        self.table = None
        self.db_credentials = json.loads(open("../resources/credentials.json").read())
        self.db_manager = DataBaseManager(self.db_credentials['username'],
                                          self.db_credentials['password'],
                                          self.db_credentials['port'])

但是,我收到以下错误

python src/Record.py resources/ngena-sa.yang
resources/ngena-sa.yang
Traceback (most recent call last):
  File "src/Record.py", line 242, in <module>
    x = Record(args.yang_path)
  File "src/Record.py", line 39, in __init__
    self.db_credentials = json.loads(open("../resources/credentials.json").read())
FileNotFoundError: [Errno 2] No such file or directory: '../resources/credentials.json'

1 个答案:

答案 0 :(得分:1)

我可以使用以下内容读取json

def __init__(self, yang_path=None, json_path=None, xml_path=None,jsonData=None, xmlStr=None):

        self.xmlStr = xmlStr
        self.yang_path = yang_path
        self.xml_path = xml_path
        self.json_path = json_path
        self.tables = []
        self.module_name = ''
        self.connections = []
        self.table = None
        abs_path = sys.path[0]
        base_name = os.path.dirname(abs_path)
        resources_path = os.path.join(base_name, "resources/credentials.json")

        self.db_credentials = json.loads(open(resources_path).read())
        self.db_manager = DataBaseManager(self.db_credentials['username'],
                                          self.db_credentials['password'],
                                          self.db_credentials['port'])