分享

关于write()函数的参数及pickle模块

 OneDayDayUp 2015-08-07
write的参数只能是字符串类型,如果想把其他类型的变量写入文件,就必须将其转换成字符串。如果write()的参数是其他类型,就会报错:TypeError: expected a character buffer object。
  1. #计算字符出现的次数
  2. import string
  3. f1=open('original_corpus.txt','r')
  4. f2=open('result_corpus.txt','w')
  5. a_list=[]
  6. b_list=[]
  7. a_str=''
  8. letterCounts = {}
  9. while True:
  10. a_str=f1.readline()
  11. if len(a_str)==0:
  12. break
  13. a_list=a_str.split()
  14. b_list=b_list+a_list
  15. for letter in b_list:
  16. letterCounts[letter] = letterCounts.get(letter,0)+1
  17. #letterCounts=sorted(letterCounts.iteritems(),key=lambda d:d[1],reverse=True)
  18. for (key,value) in letterCounts.items():
  19. f2.write(key)
  20. f2.write('t')
  21. #f2.write(value) #TypeError: expected a character buffer object
  22. f2.write(str(value))#int类型不能在文件中输出,只有转换成str类型才可以
  23. f2.write('n')
  24. f1.close()
  25. f2.close()
这样就又产生一个问题:我们通过类型转换,把其他数据类型转换为str类型,那么数据的原始类型信息就丢失了,那要想知道原始数据类型怎么办呢?
解决办法:输入pickle模块。用它提供的方法把各种类型的数据存入文件,数据结构的信息页同样被保存了。也就是说,你保存了什么,将来读出的还是什么。例如:
  1. #用dump()方法分别向文件中写入了整数、浮点数、列表和数组。用write方法写入,就会报错。
  2. import pickle
  3. f = open('test.dat', 'w')
  4. pickle.dump(100,f)
  5. pickle.dump(123.98,f)
  6. pickle.dump((1,3,'abc',f))
  7. pickle.dump([4,5,7],f)
  8. f.close()
  9.  
  10. #每调用一次load方法,就得到先前存入的一个变量,而且这个变量还保存着原始类型的信息。
  11. f = open("test.dat", "r")
  12. a = pickle.load(f)
  13. print a #100
  14. type(a) #<type ’int’>
  15. b = pickle.load(f)
  16. print b #123.98
  17. type(b) #<type ’float’>
  18. c = pickle.load(f)
  19. print c #(1, 3, ’abc’)
  20. type(c) # <type ’tuple’>
  21. d = pickle.load(f)
  22. print d #[4, 5, 7]
  23. type(d) #<type ’list’>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多