8

I have a file .env file contain 5 lines

DB_HOST=http://localhost/
DB_DATABASE=bheng-local
DB_USERNAME=root
DB_PASSWORD=1234567890
UNIX_SOCKET=/tmp/mysql.sock

I want to write python to grab the value of DB_DATABASE I want this bheng-local


I would have use

import linecache
print linecache.getline('.env', 2)

But some people might change the order of the cofigs, that's why linecache is not my option.


I am not sure how to check for only some strings match but all the entire line, and grab the value after the =.

I'm kind of stuck here :

file = open('.env', "r")
read = file.read()
my_line = ""

for line in read.splitlines():
    if line == "DB_DATABASE=":
        my_line = line
        break
print my_line

Can someone please give me a little push here ?

1
  • the startwith may be of assistance. Commented Mar 4, 2017 at 20:46

5 Answers 5

12

Modify your .env to

[DB]
DB_HOST=http://localhost/
DB_DATABASE=bheng-local
DB_USERNAME=root
DB_PASSWORD=1234567890
UNIX_SOCKET=/tmp/mysql.sock

Python code

#!/usr/local/bin/python
import configparser
config = configparser.ConfigParser()
config.read('test.env')
print config.get('DB','DB_DATABASE')

Output:

bheng-local

Read https://docs.python.org/3/library/configparser.html

Sign up to request clarification or add additional context in comments.

1 Comment

I like the idea of using the parser, but it require me to add more texts on top of my configs file. I don't mind if I am the only one that has it. This config file s is deployed to thousand people already. :( Is there a simple way to grab it base on DB_DATABASE which is the string of file ?
10

Have a look at the config parser: https://docs.python.org/3/library/configparser.html

It's more elegant than a self-made solution

2 Comments

I like the idea of using the parser, but it require me to add more texts on top of my configs file. I don't mind if I am the only one that has it. This config file s is deployed to thousand people already. :( Is there a simple way to grab it base on DB_DATABASE which is the string of file ?
There are some hacks to go around it, you can find them here: The shortest is probably this one , for Python 3.2+ and this one for earlier versions. The most elegant probably this one.
4

This should work for you

#!/usr/local/bin/python
file = open('test.env', "r")
read = file.read()

for line in read.splitlines():
    if 'DB_DATABASE=' in line:
        print line.split('=',1)[1]

Comments

2
#!/usr/local/bin/python

from configobj import ConfigObj
conf = ConfigObj('test.env')
print conf['DB_DATABASE']

2 Comments

Using ConfigObj, we do not need to add anything like section header at the start of the .env file to read the variable values from it.
And without a header, the configuration file can also be read by other languages easily, like Bash for example.
2
from os import environ, path
from dotenv import load_dotenv

basedir = path.abspath(path.dirname(__file__))
load_dotenv(path.join(basedir, '.env'))
DB_DATABASE = environ.get('DB_DATABASE')
print(DB_DATABASE)

This could be another option

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.