İnsan tarafından okunabilir en basit yapılandırma dosyası biçimi nedir? [kapalı]


13

Geçerli yapılandırma dosyası aşağıdaki gibidir:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

Bu, iç içe bir sözlüğe python ile okunur:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

Bunu yapmanın daha iyi bir yolu var mı? Fikir, XML tür davranışları elde etmek ve mümkün olduğunca XML'den kaçınmaktır. Son kullanıcının neredeyse tamamen okuma yazma bilmediği varsayılır ve temel olarak not defteri ve kopyala yapıştır kullanır. Bu nedenle python standardı "başlık + değişkenler" tipi çok zor kabul edilir.

Sahte kullanıcı config dosyasını düzenler, programcılar sözlükleri yönetebilir. İç içe sözlük kolay bölme için seçilir (kaydedici ana pencere parametrelerine ihtiyaç duymaz, hatta sahip olamaz / düzenleyemez).


11
En basit olanı, istemcinizi bu yapılandırma dosyalarını düzenlemekten başka bir şey yapmayan küçük bir uygulama oluşturmaktır.
Patrick Hughes

11
İnsanlar için en basit yapılandırma dosyası : Do what I want.Bilgisayarlar için en zor olanı : P
Sjoerd

@PatrickHughes Zaten bir tane var sanırım. Böyle bir programın farkında mısınız? Ben sadece basit şeyler "güzel yazdırmak" için zaman ayırmak istemiyorum. Sorun, küçük program sonları eklemenin daha fazlasını gerektirmesidir. Yani her bilgisayarda vim, textedit veya not defteri var.
Juha

@sjoerd Bunu bilmek istedim. İnsan dilinde bu anlamda programlardan daha fazla algoritma var mı?
Juha

2
Kullanıcılar her şeyi kırabilir. Manuel olarak düzenleyeceklerse, desteklemeye hazır olunmainwindow.title =='test"
MSalters

Yanıtlar:


15

YAML gibi bir şey kullanabilirsiniz . İşte bir örneğe bağlantı:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Python bağlarını PyYAML'de bulabilirsiniz . JSON'dan biraz daha kullanıcı dostu (ikinci örneğiniz böyle görünüyor).


10
YAML züppe ama kesinlikle en basit değil.
9000

1
Ben onun sorusu bağlamında en basit düşündüm: "XML davranışını almak ve mümkün olduğunca XML kaçının". Bu gereksinimi karşılarken daha basit bir şeyden emin değilim.
jmq

hmm, "" kodunu değiştirirsem ilk kod bloğum YAML de öyle. ve "=" ila ":" ve aphostropes kaybedilsin mi? Biraz fazladan veri var ama hangi gösterimi en çok sevdiği kullanıcıya bağlı.
Juha

3
Dursun gibi daha karmaşık şeyler - Oldukça belirli teknik olmayan kullanıcılar girinti yanlış almak için gidiyoruz olduğum >sonrasÖ comments:ve &ve *önündeid001
Izkata

6

Yapabileceğiniz en iyi şey çözümünüzün bir maketini ve belki de birkaç başka çözümün maketini sağlamak ve sisteminizin iki veya üç temsilci kullanıcısına sormaktır. Size neyi sevdiklerini söylemede, bu sitedeki soruları cevaplayan kendi seçtikleri insanlardan çok daha iyi olacaklar.

Olduğu söyleniyor, "temelde bilgisayar okuma yazma bilmeyen" kullanıcılar için Bence sorunuzun gösterdiği biçim muhtemelen en iyi düz metin biçimidir. Gerçekten bilgisayar okuma yazma bilmiyorlarsa, yapılandırma dosyalarını elle düzenlemek zorunda kalmamaları için basit bir GUI düşünebilirsiniz.


3

Kaybedebileceğiniz her şeyi kaybedin. name.name.name=value, her biri ayrı bir satırda, alabileceğiniz kadar basit. Ayrıştırma için tırnak işaretlerine ihtiyacınız yok, bilirsiniz ne zaman truebir boolean ve ne zaman truebir dize, "aptal insan" bunu size söyletmeyin. Dizeler için, alanın ön / arka boşlukları yoksa, bunları kendiniz soyun.


3

İngilizce bilmeyen, yapılandırma dosyanızı okumaya çalışan Çinli bir kişi düşünün. Alternatif olarak, yapılandırma dosyasının Arapça olduğunu (ve Arapça bilmediğinizi) düşünün. Şimdi kendinize sorun, bu gerçekten insan tarafından okunabilir mi?

Okuyucu İngilizce biliyor olsa bile, "logger.datarate = 100" öğesinin saniyede 100 karakter veya saatte 100 GiB veya metrik ton başına 100 tavuk anlamına gelip gelmediği konusunda hala bir fikirleri yoktur.

En okunabilir dosya biçimi, iyi bir GUI tabanlı iletişim kutusu / sihirbaz / yapılandırıcı (uluslararasılaştırma, yardım sistemi vb.) İle ikili bir dosyadır.


2

Patrick Hughes ile birlikteyim. Yapılandırmaları düzenlemek için basit bir uygulama oluşturun. Yapılandırma dosyasının kendisi biraz daha karmaşık olabilir ve düzenleyicinin kullanacağı nitelikleri içerebilir (görünen ad, yardım metni, değer türü, min / maks değer, vb.).


1
Buradaki sorun, uygulamanın osx, win ve ubuntu'yu desteklemesi ve dosya sistemine erişmesi gerektiğidir. Yani benim tek alternatifim statik python çalıştırılabilir (ve yerel görünüm için wx). Yoksa başka diller mi var? Statik java yürütülebilir dosyaları yapabilir misiniz?
Juha

Bir QT uygulaması sizin durumunuzda basit ve uyumlu bir çözüm olacaktır
Riga

2

Ben (özellik dosyası) zaten en iyi insan tarafından okunabilir yapılandırma biçimi olduğunu söylüyorum. :)

İşte benim argümanlarım:

  • Özellikler dosyası sadece anahtar / değer çiftidir. İnsan tarafından kolayca okunabilir.
  • Kısa sözdizimi, xml gibi değil.
  • Örneğinizde olduğu gibi '.' İle kolayca yuvalanabilir.
  • Düz yapı, kaynak kontrollü bir ortamda kolay fark edilmesini sağlar.

Bu son nokta aslında oldukça önemli. Günümüzde projelerin hepsinin şubelere ayrıldığı göz önüne alındığında, yapılandırma dosyası şubeleri birleştirirken tonlarca acıya neden olabilir. Özellikler dosyası gibi düz dosya biçimini birleştirmek ağaç yapısı dosyasından daha kolaydır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.