I've searched for the answer to this here for awhile and haven't found it, so hope this isn't a dupe.
I have a properties file that mostly contains key=value pairs, but also contains #comments. I need to put it in a dictionary so I can grab values at will. In a file without #comments, the following works perfectly.
myprops = dict(line.strip().split('=') for line in open('/Path/filename.properties'))
print myprops['key']
But not so when there are comments present. If there's #comment
present, dictionary says
"ValueError: dictionary update sequence element #x has length 1, 2 is required"
I've tried wrapping the dictionary creation in conditionals with
if not line.startswith('#'):
But I can't seem to get that to work. Suggestions? Thanks!
To address your newest constraint about blank lines, I would try something like:
myprops = {}
with open('filename.properties', 'r') as f:
for line in f:
line = line.rstrip() #removes trailing whitespace and '\n' chars
if "=" not in line: continue #skips blanks and comments w/o =
if line.startswith("#"): continue #skips comments which contain =
k, v = line.split("=", 1)
myprops[k] = v
It's very clear and it's easy to add on extra constraints, whereas using a dict comprehension will get quite bloated. However, you could always format it nicely
myprops = dict(line.strip().split('=')
for line in open('/Path/filename.properties'))
if ("=" in line and
not line.startswith("#") and
<extra constraint> and
<another extra constraint>))