简体   繁体   中英

remove double quotes around dictionary object - python

I have a dictionary that I am using to populate a YAML config file for each key.

{'id': ['HP:000111'], 'id1': ['HP:000111'], 'id2': ['HP:0001111', 'HP:0001123'])}

code to insert key:value pair into YAML template using ruamel.yaml

import ruamel.yaml
import sys

yaml = ruamel.yaml.YAML()
with open('yaml.yml') as fp:
    data = yaml.load(fp)

for k in start.keys():
    data['analysis']['hpoIds'] = start.get(key)
       with open(f"path/yaml-{k}.yml","w+") as f:
           yaml.dump(data, sys.stdout)

this is output I am getting

analysis:
    # hg19 or hg38 - ensure that the application has been configured to run the specified assembly otherwise it will halt.
  genomeAssembly: hg38
  vcf:
  ped:
  proband:
  hpoIds: "['HP:000111','HP:000112','HP:000113']"

but this is what I need

  hpoIds: ['HP:000111','HP:000112','HP:000113']

ive tried using string tools ie strip, replace but didnt

output from ast.literal_eval.

hpoIds:
  - HP:000111
  - HP:000112
  - HP:000113

output from repr

hpoIds: "\"['HP:000111','HP: 000112','HP:000113']\""

any help would be greatly appreciated

It is not entirely clear to me what you are trying to do and why you eg open files 'w+' for dumping.

However if you have something that comes out block style and unquoted, that can easily be remedied by using a small function:

import sys
from pathlib import Path
import ruamel.yaml

SQ = ruamel.yaml.scalarstring.SingleQuotedScalarString

def flow_seq_single_quoted(lst):
    res = ruamel.yaml.CommentedSeq([SQ(x) if isinstance(x, str) else x for x in lst])
    res.fa.set_flow_style()
    return res

in_file = Path('yaml.yaml') 
in_file.write_text("""\
hpoIds:
  - HP:000111
  - HP:000112
  - HP:000113
""")

yaml = ruamel.yaml.YAML()
data = yaml.load(in_file)
data['hpoIds'] = flow_seq_single_quoted(data['hpoIds'])

yaml.dump(data, sys.stdout)

which gives:

hpoIds: ['HP:000111', 'HP:000112', 'HP:000113']

The recommended extension for YAML files has been .yaml since at least September 2006.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM