2016-02-19 68 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