2013-01-18 150 views
1

我有一個將輸入流作爲輸入的方法(.yml解析器)。問題是它在某些地方遇到某些字符時會拋出錯誤,例如%替換流中的某些字符

我想要做的是取出流,用佔位符替換所有%,然後將它傳遞給解析器。

這是我有什麼(不與當前輸入工作):

stream = open('file.yml', 'r') 
    dict = yaml.safe_load(stream) 

但我想我需要的是這樣的:

stream = open('file.yml', 'r') 
    temp_string = stringFromString(stream)  #convert stream to string 
    temp_string.replace('%', '_PLACEHOLDER_') #replace with place holder 
    stream = streamFromString(temp_String)  #conver back to stream 
    dict = yaml.safe_load(stream) 

回答

7

做的好方法這將是寫一個發電機,這樣它仍然是懶惰的(整個文件不需要一次讀入):

def replace_iter(iterable, search, replace): 
    for value in iterable: 
     value.replace(search, replace) 
     yield value 

with open("file.yml", "r") as file: 
    iterable = replace_iter(file, "%", "_PLACEHOLDER") 
    dictionary = yaml.safe_load(iterable) 

請注意使用with語句打開文件 - 這是使用Python打開文件的最佳方式,因爲它可以確保文件正常關閉,即使發生異常時也是如此。

另請注意,dict是一個很差的變量名稱,因爲它會粉碎內置的dict()並阻止您使用它。

請注意,您的stringFromStream()功能本質上是file.read(),而steamFromString()data.splitlines()。你所說的'流'實際上只是一個字符串(文件行)的迭代器。

+0

啊好的。我想我對溪流的理解是低於標準的。感謝您的快速回復,併爲'with'加+1 – BloonsTowerDefence

相關問題