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