f=open("raindata.txt","r")
f.readline()#第一行是列,可以将文件移到第二行开始处
for line in f:
print line.decode("gb2312")
结果如下:
1,10.2,南京
2,45,北京
3,78,上海
3、错误三
将数据正确读取出来之后就需要把每一行的数据存储到对象中。代码如下:
f=open("raindata.txt","r")
f.readline()#第一行是列,可以将文件移到第二行开始处
for line in f:
lines=line.decode("gb2312").split(",")
obj=Rain(lines[0],lines[1],lines[2])
data.append(obj)
结果出现了split(",”)这个方法错误,提示说这个方法里面的参数不是中文编码。如下:
lines=line.decode("gb2312").split(",")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
import sys
default_encoding="utf-8"
if(default_encoding!=sys.getdefaultencoding()):
reload(sys)
sys.setdefaultencoding(default_encoding)
data =[]
f=open("raindata.txt","r")
f.readline()#第一行是列,可以将文件移到第二行开始处
for line in f:
lines=line.decode("gb2312").split(",")
obj=Rain(lines[0],lines[1],lines[2])
data.append(obj)
f.close()
print len(data)
这样就解决了。
4、错误四
当把文本文件的编码方式换成了utf-8之后,上面的代码就出错了,错误如下:
Traceback (most recent call last):
File "D:\program\Java\PythonOne\src\Test\FileHandle.py", line 24, in <module>
lines=line.decode("gb2312").split(",")
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 3-4: illegal multibyte sequence
import sys
default_encoding="utf-8"
if(default_encoding!=sys.getdefaultencoding()):
reload(sys)
sys.setdefaultencoding(default_encoding)
data =[]
f=open("raindata.txt","r")
f.readline()#第一行是列,可以将文件移到第二行开始处
for line in f:
lines=line.split(",")
obj=Rain(lines[0],lines[1],lines[2])
data.append(obj)
f.close()
f1=open('result.txt','w')
for vs in data:
f1.write((vs.id+","+vs.acc+","+vs.site).encode("gb2312"))
f1.write("\n")
fl.close()
到此为止,利用python进行读写文件的已经能够成功的运行的。然而,还补充一点,这是在打印列表中的中文时所照成的问题,并不是乱码的问题。