Конвертировать CSV в Plist из Array of Arrays - PullRequest
0 голосов
/ 21 мая 2018

Я создаю приложение, которое в значительной степени опирается на списки, состоящие из массива массивов (строк).Я не могу найти инструмент для преобразования CSV в такой список легко.Вещи, которые я пробовал:

  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 Ответ

0 голосов
/ 21 мая 2018

Я разобрался с этим.По предложению 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...