Last active
September 25, 2017 22:03
-
-
Save ynsta/7221512c583fbfbafe6d to your computer and use it in GitHub Desktop.
Steam vdf/json converters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import json | |
def json2vdf(stream): | |
""" | |
Read a json file and return a string in Steam vdf format | |
""" | |
def _istr(ident, string): | |
return (ident * '\t') + string | |
data = json.loads(stream.read(), object_pairs_hook=list) | |
def _json2vdf(data, indent): | |
out = '' | |
for k, v in data: | |
if isinstance(v, list): | |
if indent: | |
out += '\n' | |
out += _istr(indent, '"{}"\n'.format(k)) | |
out += _istr(indent, '{\n') | |
out += _json2vdf(v, indent + 1) | |
out += _istr(indent, '}\n') | |
else: | |
out += _istr(indent,'"{}" "{}"\n'.format(k, v)) | |
return out | |
return _json2vdf(data, 0) | |
def main(): | |
""" | |
Read json and write Steam vdf conversion | |
""" | |
import sys | |
import argparse | |
parser = argparse.ArgumentParser(prog='json2vdf', description=main.__doc__) | |
parser.add_argument('-i', '--input', | |
default=sys.stdin, | |
type=argparse.FileType('r'), | |
help='input json file (stdin if not specified)') | |
parser.add_argument('-o', '--output', | |
default=sys.stdout, | |
type=argparse.FileType('w'), | |
help='output vdf file (stdout if not specified)') | |
args = parser.parse_args() | |
args.output.write(json2vdf(args.input)) | |
if __name__ == '__main__': | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
from shlex import shlex | |
def vdf2json(stream): | |
""" | |
Read a Steam vdf file and return a string in json format | |
""" | |
def _istr(ident, string): | |
return (ident * ' ') + string | |
jbuf = '{\n' | |
lex = shlex(stream) | |
indent = 1 | |
while True: | |
tok = lex.get_token() | |
if not tok: | |
return jbuf + '}\n' | |
if tok == '}': | |
indent -= 1 | |
jbuf += _istr(indent, '}') | |
ntok = lex.get_token() | |
lex.push_token(ntok) | |
if ntok and ntok != '}': | |
jbuf += ',' | |
jbuf += '\n' | |
else: | |
ntok = lex.get_token() | |
if ntok == '{': | |
jbuf += _istr(indent, tok + ': {\n') | |
indent += 1 | |
else: | |
jbuf += _istr(indent, tok + ': ' + ntok) | |
ntok = lex.get_token() | |
lex.push_token(ntok) | |
if ntok != '}': | |
jbuf += ',' | |
jbuf += '\n' | |
def main(): | |
""" | |
Read Steam vdf and write json compatible conversion | |
""" | |
import sys | |
import argparse | |
parser = argparse.ArgumentParser(prog='vdf2json', description=main.__doc__) | |
parser.add_argument('-i', '--input', | |
default=sys.stdin, | |
type=argparse.FileType('r'), | |
help='input vdf file (stdin if not specified)') | |
parser.add_argument('-o', '--output', | |
default=sys.stdout, | |
type=argparse.FileType('w'), | |
help='output json file (stdout if not specified)') | |
args = parser.parse_args() | |
args.output.write(vdf2json(args.input)) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment