2016-09-22 30 views
0

我已經創建了一個逗號分隔的字符串,通過從Python 3.5中的列表中加入字符串並使用它將它寫入使用configobj的INI文件中。以下是在一個Ubuntu的16.04終端中使用的樣品Python腳本:如何避免從Python中的列表中加入逗號分隔的字符串引號

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 

這與引號寫入字符串爲「ITEM1,ITEM2」,如下所示。

[items] 
itemlist = "item1,item2" 

但是,如果項目與其他字符(例如「;」)聯接在一起,則會將該字符串寫入不帶引號!如何讓它寫入不帶引號的逗號分隔字符串?

欣賞任何提示或解決方案。

+0

壓倒一切的內置名稱,如'list'和'str'是一個可怕的做法。 –

+0

感謝Ilja的意見。我編輯並更正了它。 – Srij

回答

2

逗號是爲字段分隔保留的,因此您不能使用逗號(除非really want to)帶有逗號的非引號字符串值。顯然,你想有值的列表,所以只是通過一個列表作爲值:

from configobj import ConfigObj 

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

這將導致

[items] 
itemlist = item1, item2 
+0

感謝Ilja和Tiger-222,這兩個解決方案都能正常工作。我會用列表作爲價值,因爲它很簡單。 – Srij

+0

順便說一句,使用列表直接在逗號後面添加一個空格,這在我的一個配置文件中是不可接受的。有沒有辦法阻止增加空間? – Srij

+0

啊,在這種情況下,你應該堅持[@ tiger-222's answer](http://stackoverflow.com/a/39636774/2681632)。關於['list_values'](https://configobj.readthedocs.io/en/latest/configobj.html#list-values)的文檔特別提到必須將自己的解析/自定義格式作爲用例。 –

2

另一種解決方案是使用list_values關鍵字:

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

As the documentation says,如果list_values=False那麼單行值在讀寫時不會被引用或未被引用。

結果:

[items] 
itemlist = item1,item2 
相關問題