2016-02-19 30 views
1

以下文件2016_01_22_Reps.txt是我想要放入python dic文件的擴展收縮列表; 「can not」:「can not」,「could've」:「could have」,「could've」:「could have」,「did not」:「did not」,「does not」: 「不」,「不」,「不」,「沒有」,「沒有」,「沒有」,「沒有」,「沒有」,「沒有」,「我會「:」我會「,」我是「:」我是「,」我有「:」我有「,」不是「:」不是「,」我會「:」我 注意,內容是單個線,而不是多行將文本文件讀入dic文件導致不完整的dic文件

我的代碼如下。

reps = open('2016_01_22_Reps.txt', 'r') 
Reps1dic={} 
for line in reps: 
    x=line.split(",") 
    a=x[0] 
    b=x[1] 
    c=len(b)-1 
    b=b[0:c]   
    Reps1dic[a]=b 
print (Reps1dic) 

前兩對收縮的目錄如下後輸出到Reps1dic停止;

{‘2016_01_22Reps = {「can\’t」:」cannot」‘ : ‘」could\’ve」:」could have’}

說明和解釋爲什麼完整的文件內容沒有寫入到dic文件將不勝感激。

+0

感謝您的幫助! – RJS

回答

2

問題是您的值全部位於同一行,因此for line in reps只會經歷一次迭代。做這樣的事情:

with open('2016_01_22_Reps.txt', 'r') as reps: 
    Reps1dic={} 
    contents = reps.read() 
    pairs = contents.split(',') 
    for pair in pairs: 
     parts = pair.split(':') 
     a = parts[0].replace('"', '').strip() 
     b = parts[1].replace('"', '').strip() 
     Reps1dic[a] = b 
print(Reps1dic) 

在這裏你拆分線,然後遍歷該列表,而不是在文件中的行。我還使用with keyword來打開你的文件 - 這是更好的做法。

+0

當我嘗試運行你的代碼時,我看到這個奇怪的錯誤。 'Traceback(最近調用最後一個): 文件「so.py」,第10行,在 print(Reps1dic) 文件「.... \ WinPython-32bit-3.4.3.7Slim \ python-3.4.3 \ lib \ en codings \ cp437.py「,第19行,編碼爲 返回codecs.charmap_encode(輸入,self.errors,encoding_map)[0] UnicodeEncodeError:'charmap'編解碼器無法編碼位置63-64中的字符:字符m aps到'奇怪的是每次我運行它時字符位置的錯誤都在變化。 – Igor

+0

好吧,問題是[Windows控制檯無法顯示unicode字符串](http://stackoverflow.com/questions/26670103/python-can-encode-to-utf-8-but-cant-decode) 。我認爲這是位於這裏的討厭的「聰明的語錄」,「不能」:'不能','不','不','不'。 @RJS,我會將它們從你的文本文件中刪除,以免你頭痛。否則,@威爾伯的解決方案將起作用。 – Igor

+0

是的,我有一個類似的問題,但我認爲這只是我的複製/粘貼,並且原始txt文件不包含智能引號。 – wpercy