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

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

‘r’:只读(缺省。如果文件不存在,则抛出错误)

‘w’:只写(如果文件不存在,则自动创建文件)

‘a’:附加到文件末尾(如果文件不存在,则自动创建文件)

‘r+’:读写(如果文件不存在,则抛出错误)

1 importcsv,os2 if os.path.isfile('test.csv'):3 with open("test.csv","r") as csvfile:4 reader =csv.reader(csvfile)5 #这里不需要readlines

6 for line inreader:7 print line

importcsv#python2可以用file替代open#不存在则会创建文件

with open("test.csv","w") as csvfile:

writer=csv.writer(csvfile)#先写入columns_name

writer.writerow(["index","a_name","b_name"])#写入多行用writerows

writer.writerows([[0,1,3],[1,2,3],[2,3,4]])

importcsv#python2可以用file替代open#不存在则会创建文件

with open("test.csv","a") as csvfile:

writer=csv.writer(csvfile)#先写入columns_name

writer.writerow(["index","a_name","b_name"])#写入多行用writerows

writer.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 importcodecs5

6 f = codecs.open('c:/intimate.txt','a','utf-8')#这里表示把intimate.txt文件从utf-8编码转换为unicode,就可以对其进行unicode读写了7 f.write(u'中文')#直接写入unicode8 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 ins:16 print line.encode('gbk')

6、python代码文件的编码

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

# coding=utf-8 ##以utf-8编码储存中文字符

print ‘中文’像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下2种方式:

s1  = u’中文’ #u表示用unicode编码方式储存信息

s2 = unicode(‘中文’,’gbk’)

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

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

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

python字符串的编码

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

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

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

从str转unicode,所以要用decode

例如:

# coding=utf-8 #默认编码格式为utf-8

s = 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、获得系统编码:

importsysprint sys.getdefaultencoding()

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

#! /usr/bin/env python#-*- coding: utf-8 -*-

importsys

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 中文乱码_python读写csv时中文乱码问题解决办法相关推荐

  1. c++解析csv 存入数组_Python读写csv文件专题教程(2)

    第275篇原创 上篇:Python读写csv文件专题教程(1) 2.3 通用解析框架 dtype 承接前文,test.csv读入后数据框如下: In [6]: df = pd.read_csv('te ...

  2. python 写文件 编码_Python文件写入时的编码问题解决

    如下代码: import sys import os import django root_dir = os.path.join(os.path.dirname(os.path.abspath(__f ...

  3. python本地读csv文件_python读写csv文件方法详细总结

    python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来. 在编写python程序的时候需要csv模块或者pandas模块,其中csv ...

  4. python 写入csv 文件显示乱码_python 写入csv乱码问题解决方法

    需求背景 最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件.附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但 ...

  5. python为什么找不到csv文件_python读写csv文件的方法(还没试,先记录一下)

    该csv模块定义了以下功能: csv.reader(csvfile,dialect ='excel',** fmtparams) 返回一个reader对象,它将迭代给定csvfile中的行. csvf ...

  6. python导入文件列行_python读写csv文件并增加行列的实例代码

    python读写csv文件并增加行列,具体代码如下所示: # -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28: ...

  7. python 读取csv带表头_python读csv文件时指定行为表头或无表头的方法

    pd.read_csv()方法中header参数,默认为0,标签为0(即第1行)的行为表头.若设置为-1,则无表头.示例如下: (1)不设置header参数(默认)时: df1 = pd.read_c ...

  8. python 读写csv文件(创建、追加、覆盖)_python 读写csv文件(创建,追加,覆盖)...

    总述: 这篇博客讲述python怎样创建,读写,追加csv文件 创建: 利用csv包中的writer函数,如果文件不存在,会自动创建,需要注意的是,文件后缀一定要是.csv,这样才会创建csv文件 这 ...

  9. python readcsv读取gbk编码文件_python读写csv文件

    今天闲来无事,写了会CSV,简单总结下csv具体操作 什么是csv 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本 ...

最新文章

  1. 什么是负边沿触发_晶闸管的导通条件是什么 晶闸管(可控硅)检测方法
  2. 用Java创建JMeter变量 - 终极指南
  3. 根据map中某一字段排序
  4. 台湾大学林轩田机器学习基石课程学习笔记5 -- Training versus Testing
  5. Spring中使用Spark连接的DataSource
  6. 智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
  7. 负载均衡环境搭建实战之nginx和tomcat
  8. 洛谷P1525 关押罪犯
  9. python源代码现成重用大全
  10. tcp实时传输kafka数据_tcp怎么传输大数据
  11. 使用Python字符串的编码与解码方法实现信息加解密
  12. 锋利的jQuery-3--用js给多选的checkbox或者select赋值
  13. 2021最新Java面试真题解析!javasocket编程面试题
  14. 数列极限:无穷量与待定型
  15. 一禅小和尚的人生哲学
  16. python机器学习实战|机器学习入门笔记1-机器学习流程+matplotlib简单应用
  17. 《30天自制操作系统》学习笔记--Mac环境搭建
  18. android蓝牙键盘输入法,手机外接蓝牙键盘,用什么输入法好?
  19. 华为机试真题 C++ 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
  20. IE无法上网,远程计算机或设备将不接受连接,其他浏览器可用

热门文章

  1. Flask and Ajax Post HTTP/1.1 400
  2. Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py 错误解决办法
  3. python浅拷贝 深拷贝
  4. 图像变换-图像拉伸、收缩、扭曲、旋转[1] - 仿射变换(cvWarpAffine)
  5. java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...
  6. 中大南方学院计算机温澍潜,中大南方学院
  7. php任何读取外键数据,在表中设置外键实现的是哪一类数据完整性
  8. 战略资产配置matlab,资产组合有效前沿的解和最优解(MATLAB语言)
  9. Java 设计模式之抽象工厂模式
  10. linux 文件系统 启动,linux kernel文件系统启动部分