参考1

参考2

参考3

CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 “,” 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开。CSV文档是一种编辑方便,可视化效果极佳的数据存储方式

1、python读写、追加csv方法:

‘r’:只读(缺省。如果文件不存在,则抛出错误)
‘w’:只写(如果文件不存在,则自动创建文件)
‘a’:附加到文件末尾(如果文件不存在,则自动创建文件)
‘r+’:读写(如果文件不存在,则抛出错误)

1 import csv,os
2 if os.path.isfile('test.csv'):
3     with open("test.csv","r") as csvfile:
4         reader = csv.reader(csvfile)
5         #这里不需要readlines
6         for line in reader:
7             print line

import csv#python2可以用file替代open
#不存在则会创建文件
with open("test.csv","w") as csvfile: writer = csv.writer(csvfile)#先写入columns_namewriter.writerow(["index","a_name","b_name"])#写入多行用writerowswriter.writerows([[0,1,3],[1,2,3],[2,3,4]])

import csv#python2可以用file替代open
#不存在则会创建文件
with open("test.csv","a") as csvfile: writer = csv.writer(csvfile)#先写入columns_namewriter.writerow(["index","a_name","b_name"])#写入多行用writerowswriter.writerows([[0,1,3],[1,2,3],[2,3,4]])

2、excel打开csv文件,可以识别编码“GB2312”,但是不能识别“utf-8”,数据库里的字符串编码是utf-8.因此:

当从csv读取数据(data)到数据库的时候,需要先把GB2312转换为unicode编码,然后再把unicode编码转换为utf-8编码:data.decode('GB2312').encode('utf-8')

当从数据库读取数据(data)存到csv文件的时候,需要先把utf-8编码转换为unicode编码,然后再把unicode编码转换为GB2312编码:data.decode('utf-8').encode('GB2312')

3、decode('utf-8')表示把utf-8编码转换为unicode编码;encode('utf-8')表示把unicode编码转换为utf-8编码

4、Unicode只是一个符号集,它规定了符号的二进制代码,却没有规定二进制代码如何存储

5、可以使用python的编码转换模块:codecs

 1 python unicode文件读写:
 2
 3 #coding=gbk
 4 import codecs
 5
 6 f = codecs.open('c:/intimate.txt','a','utf-8')#这里表示把intimate.txt文件从utf-8编码转换为unicode,就可以对其进行unicode读写了
 7 f.write(u'中文')#直接写入unicode
 8 s = '中文'
 9 f.write(s.decode('gbk'))#先把gbk的s解码成unicode然后写入文件
10 f.close()
11
12 f = codecs.open('c:/intimate.txt','r','utf-8')
13 s = f.readlines()
14 f.close()
15 for line in s:
16     print line.encode('gbk')

6、python代码文件的编码

py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character。需要在代码文件的第一行或第二行添加编码指示:

  1. # coding=utf-8 ##以utf-8编码储存中文字符
  2. print ‘中文’像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下2种方式:
    1. s1  = u’中文’ #u表示用unicode编码方式储存信息
    2. s2 = unicode(‘中文’,’gbk’)

unicode是一个内置函数,第二个参数指示源字符串的编码格式。

decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。

encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。

python字符串的编码

用 u’汉字’ 构造出来的是unicode类型,不用的话构造出来是str类型

str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值

所以从unicode转str,要用encode方法

从str转unicode,所以要用decode

例如:

# coding=utf-8   #默认编码格式为utf-8s = u'中文' #unicode编码的文字
print s.encode('utf-8')   #转换成utf-8格式输出
print s #效果与上面相同,似乎默认直接转换为指定编码

我的总结:

u=u'unicode编码文字'
g=u.encode('gbk') #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode('gbk').encode('utf-8')   #以gbk编码格式读取g(因为他就是gbk编码的)并转换为utf-8格式输出
print str #正常显示中文

安全的方法:

s.decode('gbk','ignore').encode('utf-8′) #以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码,转换成utf-8编码输出

因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;

如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

unicode(str,‘gb2312‘)与str.decode(‘gb2312‘)是一样的,都是将gb2312编码的str转为unicode编码

7、代码文件编码:

我们在.py文件开头写的:#-*- coding:utf-8 -*- 声称了代码文件编码为utf-8,这时候,文件里面书写字符串都是utf-8编码的

8、获得系统编码:

import sys
print sys.getdefaultencoding()

9、sys.setdefaultencoding('utf-8')的作用是告诉系统自动解码,也就是自动完成utf-8到unicode编码的转换

#! /usr/bin/env python
# -*- coding: utf-8 -*- import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8') 

str = '中文' #这是utf-8编码的字符串
str.encode('gb18030')  #转换为gb18030编码,因为已经自动解码,所以不用写成这种样式:str.decode('utf-8').encode('gb18030')

10、字符编码判断:

法一:
isinstance(s, str) 用来判断是否为一般字符串
isinstance(s, unicode) 用来判断是否为unicode

if type(str).__name__!="unicode":
str=unicode(str,"utf-8")
else:
pass
法二:
Python chardet 字符编码判断
使用 chardet 可以很方便的实现字符串/文件的编码检测。尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要的,虽然HTML页面有charset标签,但是有些时候是不对的。那么chardet就能帮我们大忙了。

chardet实例
>>> import urllib
>>> rawdata = urllib.urlopen('http://www.google.cn/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
>>>chardet可以直接用detect函数来检测所给字符的编码。函数返回值为字典,有2个元数,一个是检测的可信度,另外一个就是检测到的编码。

chardet 安装
pip install chardet

python读写csv时中文乱码问题解决办法相关推荐

  1. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  2. python csv 中文乱码_python读写csv时中文乱码问题解决办法

    CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 "," 分隔的一列列的数据构成的,可以使用excel和文本编辑器等打开.CSV ...

  3. UTF-8的CSV文件中文乱码问题解决办法

    UTF-8的CSV文件中文乱码问题解决办法 参考文章: (1)UTF-8的CSV文件中文乱码问题解决办法 (2)https://www.cnblogs.com/leaves1024/p/1117138 ...

  4. Java csv文件中文乱码问题解决办法

    /*** CSV文件生成方法* @param head 文件头* @param dataList 数据列表* @param outPutPath 文件输出路径* @param filename 文件名 ...

  5. php 和mysql中文乱码问题,常见php与mysql中文乱码问题解决办法

    常见php与mysql中文乱码问题解决办法 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号. 症状:用PHPmyAdmin输 ...

  6. java.net.url 中文乱码_jsp get Url请求方式中文乱码问题解决办法

    本文章来给大家介绍关于jsp get Url请求方式中文乱码问题解决办法,有需要的朋友可参考. jsp中post方式请求一般不会乱码,如果乱码加上这句: 解决办法一 代码如下 复制代码 request ...

  7. php csv 中文乱码_php读取csv时中文乱码怎么办?

    php读取csv时中文乱码的解决办法:首先在导入csv的php脚本文件头部加上相应代码:然后使用[$row]进行转义,将中文编码读取出来:最后使用一个[fgetcsv()]方法的替代函数,防止php该 ...

  8. python写入csv文件中文乱码解决方案

    python写入csv文件中文乱码解决方案 参考文章: (1)python写入csv文件中文乱码解决方案 (2)https://www.cnblogs.com/vsivn/p/6115537.html ...

  9. C# asp.net页面通过URL参数传值中文乱码问题解决办法

    C# asp.net页面通过URL参数传值中文乱码问题解决办法 参考文章: (1)C# asp.net页面通过URL参数传值中文乱码问题解决办法 (2)https://www.cnblogs.com/ ...

最新文章

  1. 快速学习ggplot2
  2. 七自由度车辆稳定性数学模型和simulink求解
  3. 多线程学习-基础(四)常用函数说明:sleep-join-yield
  4. linux下mysql服务架设_linux下源码搭建php环境之mysql(一)
  5. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  6. php提前用户系统时间限制,php date()比服务器时间提前一小时(DST问题)
  7. linux下的五种io模型,Linux下的五种IO模型
  8. linux上perl怎么传输参数,如何在perl子函数中传递参数?
  9. 程序员,岂能被网站吞吐量难住?
  10. 反编译DLL并修改后再生成DLL
  11. red linux更换显卡,转:Linux(centos6.0/redhat) 安装 ATI / Nvidia 显卡驱动
  12. Linux系统自动更新时间命令的详细说明
  13. 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析
  14. Python3 编写处理Excel表格数据筛选脚本用到的一些方法
  15. 工作经费的开支范围_科研经费使用范围及说明
  16. STM32L0系列之【EEPROM读写】
  17. HMM-前向后向算法
  18. java遍历一个类的属性名,java遍历对象属性
  19. 腾讯企业邮箱通过Python自动发送邮件
  20. python asyncio future_Python 期物之 asyncio.Future

热门文章

  1. 移动开发必须要了解的易盾加固生态
  2. 【290】Python 函数
  3. .NET Core程序中使用User Secrets存储敏感数据
  4. dataTables-使用详细说明整理
  5. android 输入锁屏密码错误,安卓系统手机锁屏密码输错被停用了如何解决
  6. vuel路由间通讯_vue嵌套路由之间的通信(非vuex方法实现)
  7. python threading condition使用_Python threading模块condition原理及运行流程详解
  8. shell 输入输出脚本
  9. AWS — AWS VPC 虚拟专用云
  10. Segment Routing — Overview