美文网首页
A家经典题型 CSV parser

A家经典题型 CSV parser

作者: jl先生 | 来源:发表于2019-04-08 11:25 被阅读0次

    把一个字符串转换成CSV格式。
    输入:

    Input: csvformat
    John,Smith,john.smith@gmail.com,Los Angeles,1
    Jane,Roberts,janer@msn.com,"San Francisco, CA",0
    "Alexandra ""Alex""",Menendez,alex.menendez@gmail.com,Miami,1 """Alexandra Alex"""

    输出:

    Output: escaped string
    John|Smith|john.smith@gmail.com|Los Angeles|1
    Jane|Roberts|janer@msn.com|San Francisco, CA|0
    Alexandra "Alex"|Menendez|alex.menendez@gmail.com|Miami|1 "Alexandra Alex"

    关键在于处理好状态转移的关系

    def parsecvs(str):
        res = []
        tmp = ""
        isQuote = False
        for i in range(len(str)):
            if isQuote: #""引号内的字符
                if str[i] == "\"":
                    if i + 1 < len(str) and str[i + 1] == "\"": #两个都是" 转转义一个"
                        tmp += "\""
                    else: #引号匹配成功,弹出
                        isQuote = False
                else:
                    tmp += str[i]
            else:
                if str[i] == ",": #碰到逗号就算一个cvs单位
                    res.append(tmp)
                    tmp = ""
                elif str[i] == "\"": #进入引号内
                    isQuote = True
                else:
                    tmp += str[i]
        res.append(tmp)
        return "|".join(res)
    
    import sys
    while True:
        line1 = sys.stdin.readline().strip('\n')#.strip().split()
        str = str(line1)
        res = parsecvs(str)
        print(res)
    

    结果展示


    image.png

    相关文章

      网友评论

          本文标题:A家经典题型 CSV parser

          本文链接:https://www.haomeiwen.com/subject/zyquiqtx.html