Go to the RMD, PDF, or HTML version of this file. Go back to Python Code Examples Repository (bookdown site) or the pyfan Package (API).
Use the PyYAML to parse yaml.
First, Yaml as a string variable:
# Create the Tex Text
# Note that trible quotes begin first and end last lines
stf_tex_contents = """\
- file: matrix_matlab
title: "One Variable Graphs and Tables"
description: |
Frequency table, bar chart and histogram.
R function and lapply to generate graphs/tables for different variables.
core:
- package: r
code: |
c('word1','word2')
function()
for (ctr in c(1,2)) {}
- package: dplyr
code: |
group_by()
date: 2020-05-02
output:
pdf_document:
pandoc_args: '../_output_kniti_pdf.yaml'
includes:
in_header: '../preamble.tex'
urlcolor: blue
- file: matrix_algebra_rules
title: "Opening a Dataset"
titleshort: "Opening a Dataset"
description: |
Opening a Dataset.
core:
- package: r
code: |
setwd()
- package: readr
code: |
write_csv()
date: 2020-05-02
date_start: 2018-12-01
- file: matrix_two
title: "Third file"
titleshort: "Third file"
description: |
Third file description."""
# Print
print(stf_tex_contents)
## - file: matrix_matlab
## title: "One Variable Graphs and Tables"
## description: |
## Frequency table, bar chart and histogram.
## R function and lapply to generate graphs/tables for different variables.
## core:
## - package: r
## code: |
## c('word1','word2')
## function()
## for (ctr in c(1,2)) {}
## - package: dplyr
## code: |
## group_by()
## date: 2020-05-02
## output:
## pdf_document:
## pandoc_args: '../_output_kniti_pdf.yaml'
## includes:
## in_header: '../preamble.tex'
## urlcolor: blue
## - file: matrix_algebra_rules
## title: "Opening a Dataset"
## titleshort: "Opening a Dataset"
## description: |
## Opening a Dataset.
## core:
## - package: r
## code: |
## setwd()
## - package: readr
## code: |
## write_csv()
## date: 2020-05-02
## date_start: 2018-12-01
## - file: matrix_two
## title: "Third file"
## titleshort: "Third file"
## description: |
## Third file description.
Second, write the contents of the file to a new tex file stored inside the *_file* subfolder of the directory:
# Relative file name
srt_file_tex = "_file/"
sna_file_tex = "test_yml_fan"
srn_file_tex = srt_file_tex + sna_file_tex + ".yml"
# Open new file
fl_tex_contents = open(srn_file_tex, 'w')
# Write to File
fl_tex_contents.write(stf_tex_contents)
# print
## 908
fl_tex_contents.close()
Load Yaml file created prior, the output is a list of dictionaries:
import yaml
import pprint
# Open yaml file
fl_yaml = open(srn_file_tex)
# load yaml
ls_dict_yml = yaml.load(fl_yaml, Loader=yaml.BaseLoader)
# type
type(ls_dict_yml)
## <class 'list'>
type(ls_dict_yml[0])
# display
## <class 'dict'>
pprint.pprint(ls_dict_yml, width=1)
## [{'core': [{'code': "c('word1','word2')\n"
## 'function()\n'
## 'for '
## '(ctr '
## 'in '
## 'c(1,2)) '
## '{}\n',
## 'package': 'r'},
## {'code': 'group_by()\n',
## 'package': 'dplyr'}],
## 'date': '2020-05-02',
## 'description': 'Frequency '
## 'table, '
## 'bar '
## 'chart '
## 'and '
## 'histogram.\n'
## 'R '
## 'function '
## 'and '
## 'lapply '
## 'to '
## 'generate '
## 'graphs/tables '
## 'for '
## 'different '
## 'variables.\n',
## 'file': 'matrix_matlab',
## 'output': {'pdf_document': {'includes': {'in_header': '../preamble.tex'},
## 'pandoc_args': '../_output_kniti_pdf.yaml'}},
## 'title': 'One '
## 'Variable '
## 'Graphs '
## 'and '
## 'Tables',
## 'urlcolor': 'blue'},
## {'core': [{'code': 'setwd()\n',
## 'package': 'r'},
## {'code': 'write_csv()\n',
## 'package': 'readr'}],
## 'date': '2020-05-02',
## 'date_start': '2018-12-01',
## 'description': 'Opening '
## 'a '
## 'Dataset.\n',
## 'file': 'matrix_algebra_rules',
## 'title': 'Opening '
## 'a '
## 'Dataset',
## 'titleshort': 'Opening '
## 'a '
## 'Dataset'},
## {'description': 'Third '
## 'file '
## 'description.',
## 'file': 'matrix_two',
## 'title': 'Third '
## 'file',
## 'titleshort': 'Third '
## 'file'}]
Select yaml information by file name which is a key shared by components of the list:
ls_str_file_ids = ['matrix_two']
ls_dict_selected = [dict_yml for dict_yml in ls_dict_yml if dict_yml['file'] in ls_str_file_ids]
pprint.pprint(ls_dc_selected, width=1)
## [{'date': datetime.date(2020, 5, 2),
## 'description': 'Frequency '
## 'table, '
## 'bar '
## 'chart '
## 'and '
## 'histogram',
## 'file': 'mat_matlab',
## 'title': 'One '
## 'Variable '
## 'Graphs '
## 'and '
## 'Tables',
## 'val': 1}]
Given a list of dictionaries, dump values to yaml. Note that dumped output does not use pipe for long sentences, but use single quote and space line, which works with the rmdparrse.py function without problem.
ls_dict_selected = [dict_yml for dict_yml in ls_dict_yml
if dict_yml['file'] in ['matrix_two','matrix_matlab']]
print(yaml.dump(ls_dict_selected))
## - core:
## - code: 'c(''word1'',''word2'')
##
## function()
##
## for (ctr in c(1,2)) {}
##
## '
## package: r
## - code: 'group_by()
##
## '
## package: dplyr
## date: '2020-05-02'
## description: 'Frequency table, bar chart and histogram.
##
## R function and lapply to generate graphs/tables for different variables.
##
## '
## file: matrix_matlab
## output:
## pdf_document:
## includes:
## in_header: ../preamble.tex
## pandoc_args: ../_output_kniti_pdf.yaml
## title: One Variable Graphs and Tables
## urlcolor: blue
## - description: Third file description.
## file: matrix_two
## title: Third file
## titleshort: Third file