2013-02-13 46 views
10

我剛剛開始使用PyYAML來轉換一些數據。禁用PyYAML值轉換

我只是使用yaml.load函數,直到我注意到它試圖將所有值轉換爲uni編碼的字符串,int,日期等等,這對我來說已經足夠好了。

這可能對我的應用程序是致命的,有沒有辦法避免這種轉換? 我想收到所有的字符串。 我看着構造函數,並找不到禁用此轉換的方法。

更新: 我從yaml.load得到的是OrderedDict,一切看起來不錯。唯一的問題是有些值是字符串,有些是int。我想將所有值作爲字符串。我不希望pyyaml爲我轉換價值。

+0

那麼你就不解碼YAML。此外,**你想以字符串的形式出現什麼**,哪些不是?如果你離開* everything *一個字符串,你想'the_file.read()';-) – delnan 2013-02-13 19:36:52

+0

我使用pyyaml解析的文件實際上不是yaml,但它足夠接近。所以我想避免類型轉換。 – theAlse 2013-02-13 20:39:12

+0

但是*什麼樣的類型轉換?你想收到名單嗎?字典?你想布爾變換嗎?花車?以任意深度或以固定格式?就目前來看,這個方法太不明瞭。 – delnan 2013-02-13 20:46:26

回答

22

嗯,你可以使用Loader=yaml.BaseLoader放棄一切作爲一個字符串:

>>> x = [[1,2,3], {1:2}] 
>>> s = yaml.dump(x) 
>>> s 
'- [1, 2, 3]\n- {1: 2}\n' 
>>> yaml.load(s) 
[[1, 2, 3], {1: 2}] 
>>> yaml.load(s, Loader=yaml.BaseLoader) 
[[u'1', u'2', u'3'], {u'1': u'2'}] 
+1

注意:儘管這會禁用自動值轉換,但它似乎也會導致「<<」合併關鍵字不再跨越多個單獨的級別(即「<<」 - 合併一個本身也是「<<」的錨節點「 - 合併其他錨節點將不再工作) - 在PyYAML 3.10和3.11上進行測試 – voetsjoeba 2016-01-28 19:58:32