2016-09-22 3 views
0

Ich habe eine kommagetrennte Zeichenfolge erstellt, indem Sie Zeichenfolgen aus einer Liste in Python 3.5 verbinden und sie mithilfe von configobj in eine INI-Datei schreiben. Hier ist ein Beispiel Python-Skript in einem Ubuntu 16.04 Terminal verwendet:So vermeiden Sie Anführungszeichen aus einer kommagetrennten Zeichenfolge, die aus einer Liste in Python stammt

sudo python3 << EOP 
from configobj import ConfigObj 

config=ConfigObj("myconfig.ini") 
config['items']={} 
itemlist=('item1','item2') 
csvstr=",".join(list) 
config['items']['itemlist'] = csvstr 
config.write() 
EOP 

Dies schreibt die Zeichenfolge mit Anführungszeichen als „item1, item2“ wie unten gezeigt.

Wenn jedoch die Elemente mit anderen Zeichen wie ";" verknüpft sind, wird die Zeichenfolge ohne Anführungszeichen geschrieben! Wie man es die Komma getrennte Zeichenkette ohne Anführungszeichen schreibt?

Schätzen Sie für irgendwelche Tipps oder Lösungen.

+0

überwiegende gebautet Namen wie 'list' und' str' ist eine schreckliche Praxis. –

+0

Danke Ilja für die Kommentare. Ich habe es bearbeitet und korrigiert. – Srij

Antwort

2

Kommas sind für die Feldtrennung reserviert und daher können Sie (ohne Sie really want to) einen nicht angezählten String-Wert mit Kommas haben. Anscheinend wollen Sie eine Liste von Werten haben, so dass nur eine Liste als Wert übergeben:

from configobj import ConfigObj 

config=ConfigObj("myconfig.ini") 
config['items']={} 
itemlist=['item1','item2'] 
config['items']['itemlist'] = itemlist 
config.write() 

Das in

[items] 
itemlist = item1, item2 
+0

Dank Ilja und Tiger-222 funktionieren beide Lösungen. Ich würde die Liste als Wert verwenden, da es direkt ist. – Srij

+0

Übrigens fügt die Verwendung der Liste direkt ein Leerzeichen nach Komma hinzu, was in einer meiner Konfigurationsdateien nicht akzeptabel ist. Gibt es eine Möglichkeit, Speicherplatz zu sparen? – Srij

+0

Ah, in diesem Fall sollten Sie sich an die Antwort von @ Tiger-222 halten (http://stackoverflow.com/a/39636774/2681632). Die Dokumentation zu ['list_values'] (https://configobj.readthedocs.io/en/latest/configobj.html#list-values) erwähnt insbesondere, dass man als Anwendungsfall eigene Parsing/Custom-Formate erstellen muss. –

2

Eine andere Lösung führen wird, ist das list_values Schlüsselwort zu verwenden:

config = ConfigObj('myconfig.ini', list_values=False) 

As the documentation says, wenn list_values=False dann werden einzelne Zeilenwerte beim Lesen und Schreiben nicht oder nicht in Anführungszeichen gesetzt.

Das Ergebnis:

[items] 
itemlist = item1,item2 
Verwandte Themen