1、当读取一个文件出现UnicodeError时,可能是因为此文件的编码方式不是utf-8,因为python3默认的编码方式的utf-8,所以如果编码冲突就会出现这样的错误。解决办法是更改文件的编码方式,这个可以打开文件,然后选择‘另存为’——工具——web选项——编码方式,点击更改为utf-8即可;
2、对于0开始的数字串写入和读取的问题
写入:
对于这种类型的数字,要注意先转为字符串格式,不然的话,写入的时候,如果是数字格式,那么无论是csv还是excel,都会自动省略前面的0;当以csv格式写入时,由于一般电脑默认的打开方式是用excel软件打开,这时由于兼容问题,csv文件中的字符串的前面的0数字依然会被省略,但是当以txt文件格式打开时,就会显示出0,这说明是由于打开方式的问题。当然,这样的csv文件并不影响再次读取,尽管用excel打开会省略0,但是读取后还是会和原内容一致的;但是以excel的格式写入则不会出现这样的问题,只要注意在写入前将内容转为字符串类型就行了。
读取:
如果读取的是excel文件,那么可以通过对读取方法pd.read_excel()中的参数converters赋值,converters参数的作用是在读取时对内容进行一定的操作,这个参数赋值的类型是字典,键为列名,对应的值为函数名,故可以通过converters={‘column’:str},把读取的内容转为字符串,那么excel中的0为首的数字串就会被转为字符串读入,从而就不会被省略;如果读取的是csv文件,由于pd.read_csv()方法没有类似的参数,但是因为一般csv文件是之前从程序中写入的,读取时一般不会出现这样的问题。这里要注意的是,对于excel文件,对于0为首的数字串,一般是文本格式,这时就不要再把excel文件转为csv文件,因为这个转化由于兼容问题会引起0的丢失,所以对于这样的excel文件,直接用pd.read_excel()读取就好,不要转为csv文件再读取,这样不仅多此一举而且还会造成0的丢失。
3、csv写入和excel写入的区别以及功能的互补。最大的区别在于csv写入有追加模式‘a’,对应mode参数,但是excel写入没有类似参数,因此这就导致csv写入在追加写入的情况下不可由excel替代,这种追加模式写入的情况一般发生在需要边下载或边处理数据边保存,这是由于数据量太大,如果一次性下载好或者处理好再保存的话,可能中途的引发的错误就会导致前面的处理全部作废,要重新再来,但是如果是追加模式的写入,则后面可以从断掉的地方接着下载或处理,这可以节约大量的时间和资源。但是呢,由于csv文件由excel软件打开时,会造成部分数据丢失的问题,但是excel可视化又很好,所以为了兼得,对于这个问题的解决,可以写入时以csv的追加模式,然后让全部写入完后,再读取到程序中,然后再以excel文件的格式写入,就可以得到excel文件,这样再用excel软件打开就不会丢失数据。
以上,总结起来就是:0为首的数字串的写入要先转为字符串,csv的读取和写入一般不会有什么问题,但是当要用excel软件可视化时,为了不丢失数据,可以写追加完后读取,再以excel文件的格式写入得到excel文件,然后再用excel软件处理即可;对于excel文件的读取,用converters参数解决0丢失问题;不要把excel文件手动转为csv文件再读取,会造成数据丢失,而是直接用read_excel()方法读取。