Parsing a string which represents a list of tuples

前端 未结 6 546
自闭症患者
自闭症患者 2021-01-01 20:15

I have strings which look like this one:

\"(8, 12.25), (13, 15), (16.75, 18.5)\"

and I would like to convert each of them into a python dat

相关标签:
6条回答
  • 2021-01-01 20:45

    I've used safe_eval for jobs like this in the past.

    0 讨论(0)
  • 2021-01-01 20:47
    def parse(s):
        tuples = s.split('), ')
        out = []
        for x in tuples:
            a,b = x.strip('()').split(', ')
            out.append((float(a),float(b)))
        return out
    

    this should do the job.

    0 讨论(0)
  • 2021-01-01 20:54
    >>> import ast
    >>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
    ((8, 12.25), (13, 15), (16.75, 18.5))
    
    0 讨论(0)
  • 2021-01-01 20:54

    what's wrong with doing it systematically ? split on ")", then go through the list, remove all "(".

    >>> s="(8, 12.25), (13, 15), (16.75, 18.5)"
    >>> [ i.replace("(","") for i in s.split(")") ]
    ['8, 12.25', ', 13, 15', ', 16.75, 18.5', '']
    >>> b = [ i.replace("(","") for i in s.split(")") ]
    >>> for i in b:
    ...  print i.strip(", ").replace(" ","").split(",")
    ...
    ['8', '12.25']
    ['13', '15']
    ['16.75', '18.5']
    ['']
    

    Now you can bring each element into your data structure.

    0 讨论(0)
  • 2021-01-01 20:56

    If you're working with a CSV file, and you want more than the "naive" solution which doesn't handle any errors, you're probably best off using the Python's CSV module.

    0 讨论(0)
  • 2021-01-01 21:00

    Download PyParsing.

    I've worked with it before. You can get some pretty robust parsing behavior out of it, and I think it provides builtins that will handle your entire parsing needs with this sort of thing. Look up commaSeparatedList and nestedExpr.

    0 讨论(0)
提交回复
热议问题