Modifier les fichiers de configuration par le biais de python
J'ai besoin de modifier un fichier de configuration via python et j'ai essayé de chercher sur stackoverflow et google, et ils ne couvrent pas ma situation, car j'ai besoin de remplacer les lignes dans le fichier et effectuer correspond à ma recherche.
Aussi, ce que j'ai trouvé traite de la façon de faire pour une ligne, je vais effectuer au moins 8 ligne des remplacements dans le fichier et je voudrais savoir si il est plus propre et plus élégante façon de le faire que de mettre 10 remplacer(foo, bar) lignes au total.
J'ai besoin de "match" des lignes comme "ENABLEPRINTER", "PRINTERLIST", "PRNT1.PORT".
Je veux correspondre thesse de texte et d'ignorer tout ce qui suit (ex: "=PRNT1, PRNT2").
Donc, je voudrais faire quelque chose comme
replace('ENABLEPRINTER', 'y')
replace('PRINTERLIST', 'PRNT3)
Le fichier ressemble à ceci:
ENABLEPRINTER=n
PRINTERLIST=PRNT1, PRNT2
PRNT1.PORT=9600
PRNT1.BITS=8
Également noter que ces fichiers sont à environ 100 lignes et j'ai besoin de modifier sur 10 d'entre eux.
Merci beaucoup pour votre aide.
Mise à JOUR:
En utilisant le code posté par @J. F. Sebastian, je suis maintenant l'erreur suivante:
configobj.ParseError: Parse error in value at line 611.
Ligne 611 du fichier est:
log4j.appender.dailyRollingFile.DatePattern='.'yyyy-MM-d
Alors le problème est avec le caractère'.
Si je commente cette ligne, le script fonctionne bien avec le code posté par @J. F. Sebastian.
OriginalL'auteur mstefan | 2011-03-14
Vous devez vous connecter pour publier un commentaire.
Avant:
Après:
Trop simple pour être définitif. Dire quelles sont les erreurs ou les faiblesses.
L'avantage de regexes, c'est qu'ils peuvent être modulés facilement à un cas particulier.
.
EDIT:
Je viens juste de voir que:
"ce que je veux faire est d'assigner une nouvelle valeur à la variable "
informer de cette plus tôt!!!
Pourriez-vous nous donner un exemple de fichier avant /après , s'il vous plaît.
.
EDIT 2
Voici le code à modifier les valeurs de certaines variables dans un fichier:
Avant:
Après:
J'obtiens cette erreur: Traceback (most recent call last): File "D:\script\editconf.py", à la ligne 26, in <module> mise à jour('imprimante.propriétés',what_to_change) Fichier "D:\script\editconf.py", à la ligne 16, la mise à jour de f.écrire(pat.sub(jojo,contenu)) TypeError: ne peut pas utiliser un modèle de chaîne sur un octets-comme l'objet
Êtes-vous avec Python 3.x ?
Essayez de définir
RE = b'(('+'|'.join(dico.keys())+')\s*=)[^\r\n]*?(\r?\n|\r)'
ou quelque chose comme ça. Je suis avec Python 2.7 et je ne peux pas tester. Peut-être , depuis RÉ est une agrégation, il doit êtreRE = b'((' + b'|'.join(dico.keys()) + b')\s*=)[^\r\n]*?(\r?\n|\r)'
. Peut-être les clés de la soad doit être faite octets trop ?Il s'agit d'une méthode à l'aide de la "ConfigParser" spécifiquement pour modifier les paramètres de python "ini" des fichiers. Bien que pratique, change totalement le fichier en supprimant les commentaires et j'ai donc donné pour la méthode proposée ici lorsque nous voulons changer python "ini" fichiers! Pour plus d'informations, voir stackoverflow.com/questions/27964134/....
OriginalL'auteur eyquem
Si le fichier est dans
java.util.Propriétés
format ensuite, vous pouvez utiliserpyjavaproperties
:Il n'est pas très robuste, mais les diverses solutions pourraient bénéficier les personnes qui viennent ensuite.
Pour remplacer plusieurs fois dans un court laps de chaîne:
Pour remplacer des noms de variables dans un fichier de configuration (à l'aide de
configobj
module):Si par
replace('ENABLEPRINTER', 'y')
vous dire attribuery
à laENABLEPRINTER
variable:Il semble
configobj
n'est pas compatible avec:Vous pourriez citer:
Ou:
Ou
conf.update()
fait quelque chose de similaire à:tant pis, j'ai trouvé le python 3.x port ici bitbucket.org/zubin71/configobj-py3.
cependant, votre code ne semble pas fonctionner
ensemble
raise_errors=True
pour laConfigObj()
et.write()
appels. Définir l'encodage des caractères dans leConfigObj()
appeler explicitement. "ne fonctionne pas" est trop vague: qu'est-ce que dans le test.conf' de fichier? Qu'obtenez-vous et qu'attendez-vous pour voir (mise à jour de votre question avec des exemples de corriger d'entrée/de sortie)? Ce n'sys.version
etconfigobj.__version__
contenir?Mon impression est que mstefan veut changer la valeur de la variable, et non pas le nom de la variable. (Bien qu'il ne précise pas ce qu'il veut avoir changé.)
OriginalL'auteur jfs