2013-10-15 12 views
22

Ho un file di configurazione abc.txt che assomiglia un po 'come:Come leggere un file di configurazione utilizzando python

path1 = "D:\test1\first" 
path2 = "D:\test2\second" 
path3 = "D:\test2\third" 

voglio leggere questi percorsi dal abc.txt di usarlo nel mio programma per evitare duro codifica.

+2

Inventare i propri formati, anche se sembrano semplici, non è la migliore idea in generale. Meglio attenersi a uno integrato, ci sono un sacco di scelte: .ini, json, yaml, xml ... – georg

+1

Correlati: [Qual è la migliore pratica utilizzando un file di impostazioni in Python?] (http://stackoverflow.com/questions/5055042/) –

risposta

49

Per poter utilizzare il mio esempio, il file "abc.txt" deve apparire come:

[your-config] 
path1 = "D:\test1\first" 
path2 = "D:\test2\second" 
path3 = "D:\test2\third" 

Poi, nel tuo software è possibile utilizzare il parser config:

import ConfigParser 

e poi in te codice:

configParser = ConfigParser.RawConfigParser() 
configFilePath = r'c:\abc.txt' 
configParser.read(configFilePath) 

caso d'uso:

self.path = configParser.get('your-config', 'path1') 

* Edit (@ human.js)

in Python 3, ConfigParser viene rinominato ConfigParser (as described here)

+0

Ho modificato il post, il mio suggerimento è di usare i file di configurazione molto più semplice e utile, in questo modo puoi imparare una cosa nuova che può davvero aiutarti. l'errore 'MissingSectionHeaderError' è stato che hai bisogno della sezione' [file] ' –

+0

Certamente utile; non lo sapevo prima +1 –

+1

+100, la migliore risposta. – georg

1

Questo sembra un codice Python valido, quindi se il file si trova sul classpath del progetto (e non in qualche altra directory o in posti arbitrari) un modo sarebbe solo per rinominare il file in "abc.py" e importarlo come modulo, utilizzando import abc. È anche possibile aggiornare i valori utilizzando la funzione reload in seguito. Poi accedere ai valori abc.path1 ecc

Naturalmente, questo può essere pericoloso in caso il file contiene altro codice che verrà eseguito. Non lo userei in nessun progetto reale e professionale, ma per uno script piccolo o in modalità interattiva questa sembra essere la soluzione più semplice.

Inserire lo abc.py nella stessa directory del proprio script o nella directory in cui si apre la shell interattiva e fare import abc o from abc import *.

+1

Grazie, ma non ho una build di progetto e tutto. Sto solo eseguendo lo script Python solo da linea di comando. È possibile fare qualcosa di simile in questo caso? Voglio dire c'è qualche altro modo per renderli insieme come un pacchetto o qualcosa del genere? – a4aravind

+0

@ user2882117 Certo, basta mettere il 'abc.py' nella stessa directory del tuo script, o la directory in cui si avvia una shell interattiva, e fare' import abc'. Soprattutto se è solo per una piccola sceneggiatura, penso che questa sia la soluzione più semplice, ma non la userei in un progetto "reale". –

12

È necessario una sezione nel file:

[My Section] 
path1 = D:\test1\first 
path2 = D:\test2\second 
path3 = D:\test2\third 

Quindi, leggi le proprietà:

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.readfp(open(r'abc.txt')) 
path1 = config.get('My Section', 'path1') 
path2 = config.get('My Section', 'path2') 
path3 = config.get('My Section', 'path3') 
1

Dal momento che il file di configurazione è un normale file di testo, basta leggere utilizzando la funzione open:

file = open("abc.txt", 'r') 
content = file.read() 
paths = content.split("\n") #split it into lines 
for path in paths: 
    print path.split(" = ")[1] 

Questo stamperà i tuoi sentieri. È inoltre possibile memorizzarli utilizzando i dizionari o gli elenchi.

path_list = [] 
path_dict = {} 
for path in paths: 
    p = path.split(" = ") 
    path_list.append(p)[1] 
    path_dict[p[0]] = p[1] 

Altro su lettura/scrittura di file here. Spero che questo aiuti!

+1

Ricordarsi di chiudere il file, o meglio usare un blocco 'with'. E potrebbe anche metterli in un dizionario. –

+0

Inoltre, se si tratta solo di un file di testo, consiglio di scartare le virgolette. – aIKid

+1

@tobias_k Può capirlo da solo :) – aIKid

Problemi correlati