2016-02-23 7 views
2

Я хотел бы создать csv из списка данных, но значения ключей различаются между разделами списка. Список имеет следующий макет:Как преобразовать INI-файл в CSV-файл

[Game 1] 
Publisher= 
Developer= 
Released=Nov, 2005 
Systems= 
Genre=Action|Strategy 
Perspective=3rd-Person Perspective 
Score=4.5 
Controls= 
Players= 
Rating= 
Url=http://www.google.com.pl 
Description=This cartridge contains six of the 1 kilobyte e...... 

[Game 2] 
Publisher=Home Entertainment Suppliers Pty. Ltd. 
Developer=Imagic 
Released=1992 
Systems= 
Genre=Action 
Perspective=3rd-Person Perspective 
Score=1.5 
Controls=Joystick (Digital)|Same/Split-Screen Multiplayer 
Players=1-2 Players 
Rating= 
Url=http://www.google.com 
Description=An unlicensed multi-cart from the Australian-bas..... 
Goodname=2 Pak Special - Alien Force & Hoppy 
NoIntro= 
Tosec=2 Pak Special Light Green - Hoppy & Alien Force 

Full file here

Каждый набор данных отделенной [Game *] и представленные значения для каждой игры может быть пустым или не существует для некоторых игр, например Goodname =, NoIntro = и Tosec = отсутствуют в игре 1. Я не знаю, сколько всего ключей или столбцов требуется. В идеале я бы хотел, чтобы каждая игра была отдельной строкой в ​​файле csv.

У кого-нибудь есть идеи о том, как получить этот формат данных в csv? Я в тупике. Я знаком с bash и python, но я открыт для любых предложений о том, как автоматизировать преобразование.

Заранее спасибо.

+2

Я бы использовал python, было бы проще разобрать конфигурацию. Используйте [ConfigParser] (https://docs.python.org/2/library/configparser.html) для анализа вашего файла. Для каждого раздела создайте запись с помощью [CSV Module] (https://docs.python.org/2/library/csv.html) и оставьте значение пустым для несуществующих значений, 'Game 1 ,,, Nov, 2005 ", ...' – Ian2thedv

+0

PHP также может сделать это с помощью '' parse_ini_file() '] (http://www.php.net//manual/en/function.parse-ini-file.php). – miken32

ответ

2

В Python вы можете использовать библиотеку ConfigParser для чтения INI file и библиотеки csv для записи файла, разделенного запятой. Я написал ниже небольшой сценарий ini2csv.py, который можно использовать для обработки вашего преобразования с помощью следующей команды:

cat atari.ini | ./ini2csv.py > atari.csv 

Вот сценарий:

#!/usr/bin/python 
# encoding: utf-8 

import sys 
import csv 
from ConfigParser import ConfigParser 

ini = ConfigParser() 
ini.readfp(sys.stdin) 

#Find all keys in the INI file to build a row template and 
#include a "game" field to store the section name. 
rowTemplate = {"game":""} 
for sec in ini.sections(): 
    for key,value in ini.items(sec): 
     rowTemplate[key] = "" 

#Write the CSV file to stdout with all fields in the first line 
out = csv.writer(sys.stdout) 
out = csv.DictWriter(sys.stdout, fieldnames=rowTemplate.keys()) 
out.writeheader() 

#Write all rows 
for sec in ini.sections(): 
    row = rowTemplate.copy() 
    row["game"] = sec 
    for key,value in ini.items(sec): 
     row[key] = value 
    out.writerow(row) 

Я тестировал его с ссылкой вы предоставили в вашем вопросе и, похоже, работает так, как ожидалось.

+0

WOW !! После долгого поиска в Google, не найдя даже намека на продолжение, я, хотя это было безнадежно. Сценарий, который вы предоставили, прекрасно работает! Большое большое спасибо! :) – teeedubb

Смежные вопросы