代码之家  ›  专栏  ›  技术社区  ›  zeeple

将csv转换为数组的plist

  •  0
  • zeeple  · 技术社区  · 6 年前

    我正在构建一个很大程度上依赖于由数组(字符串)组成的plist的应用程序。我找不到一个工具可以轻松地将csv转换成这样的plist。我尝试过的事情:

    1. 一个名为csv2plist.py的应用程序,它只能将第一列转换为数组,而忽略了csv的其余部分。

    2. MindSizzlers的一个在线工具似乎不再在线(至少连接超时)。

    3. 一个名为“plist converter”的应用程序,它只创建一个词典数组plist。

    有没有其他人成功地做到这一点?关于如何将csv文件转换为数组plist有什么建议吗?

    示例输入(典型csv):

    c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,g,g,g,a1,g,g,g,g,c,c,c,c,c,c,c,c,c,c,c,c,c,c
    c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,g,g,g,o,g,g,g,g,c,c,c,c,c,c,c,c,c,c,c,c,c,c
    c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,g,g,g,o,g,g,g,g,c,c,c,c,c,c,c,c,c,c,c,c,c,c
    c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,g,g,g,o,g,g,g,g,c,c,c,c,c,c,c,c,c,c,c,c,c,c
    c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,g,g,g,o,g,g,g,g,c,c,c,c,c,c,c,c,c,c,c,c,c,c
    

    样本输出(典型数组plist):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <array>
        <array>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
        </array>
        <array>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
            <string>f</string>
        </array>
    

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   zeeple    6 年前

    我已经想好了。正如Redditer所建议的,我修改了开源CSv2plist以满足我的需要。结果是以下脚本:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sys
    import os
    import csv
    
    args = sys.argv[1:]
    
    if args:
        if(len(args) == 1):
            infile = args[0]
            outfile = infile.replace(".csv", ".plist")
            plisttype = 'array'
    
        if(open(os.path.abspath(outfile),'w')):
            if(os.path.isfile(infile)):
                data = csv.reader(open(infile))
                output = open(os.path.abspath(outfile),'w')
    
                output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
                output.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n')
                output.write('<plist version="1.0">\n')
                output.write('<array>\n')
    
                for row in data:
                    output.write('<array>\n')
                    rowList = [elem.strip().split(',') for elem in row]
                    for i in rowList:
                        output.write('\t<string>' + ''.join(i) + '</string>\n')
                    output.write('</array>\n')
    
                output.write('</array>\n')
                output.write('</plist>')
                output.close()
                print os.path.basename(os.path.abspath(outfile)) + ' created successfully'
            else:
                print infile + ' could not be opened'
                exit()
        else:
            print outfile + ' is not writable'
            exit()
    
    
    else:
        print '\ncsv2array usage:\npython csv2array.py <CSVFile>\n';