2017-03-02 54 views
0

我有一個文件.env文件包含5線讀取值

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

我想編寫Python搶DB_DATABASE的價值 我想這bheng-local


我會用

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

但是有些人可能會改變這些cofigs的順序,這就是爲什麼linecache不是我的選擇。


我不知道如何檢查只有一些字符串匹配,但所有的整條生產線,並抓住=後的值。

我有種陷在這裏:

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 

可有人請點擊這裏給我一點點推?

+0

了'startwith'可能的援助。 – boardrider

回答

4

看一看的配置解析器: https://docs.python.org/3/library/configparser.html

它比一個自制的解決方案更優雅

+0

我喜歡使用解析器的想法,但它需要我在配置文件的頂部添加更多文本。我不介意我是唯一擁有它的人。這個配置文件已經部署到上千人。 :(有沒有簡單的方法來抓住它基於DB_DATABASE這是文件的字符串? – ihue

+0

有一些黑客可以繞過它,你可以找到它們[這裏](http://stackoverflow.com/questions/2819696/ python /): 最短的可能是[this one](http://stackoverflow.com/a/25493615/3022712),對於Python 3.2+和[this one](http:/ /stackoverflow.com/a/8657601/3022712)for the early versions。最優雅的可能[this one](http://stackoverflow.com/a/2819788/3022712)。 – yar

1

修改您.ENV到

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

Python代碼

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

輸出:

bheng本地

+0

我喜歡使用解析器的想法,但它需要我在配置文件的頂部添加更多文本,我不介意是否有唯一的配置文件,這個配置文件已經部署到數千人了。基於DB_DATABASE這是文件的字符串? – ihue

2

這應該爲你工作

#!/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]