在python 2或者3 ,字符串编码只有两类 :

(1)通用的Unicode编码;

(2)将Unicode转化为某种类型的编码,如UTF-8,GBK;

计算机只处理数字,因此处理文本时,必须转换成数字才行。

8位(bit)=1字节(byte)=256种不同状态=从000000到111111;

1GB=1024M=1024(1024kb)=1024(1024(1024b));

ASCII编码 是对应英文字符与二进制数字之间的关系;ASCII一共规定了128种,如大写字母A是65,即01000001;可见一字母一字节;

GB2312编码 简体中文常见的编码,两个字节代表一个中文汉字 ,理论上256*256个编码,即可表示65536种中文字;

各国编码不同,为了各国能扩平台进行文本的转换与处理,Unicode就被作为统一码或者单一码。Unicode编码通常是两个字节,unicode与ASCII编码的区别,在于unicode在ASCII编码前加了一个0,例如,字母A的ASCII编码为01000001,unicode编码即为0000000001000001;但英文字母其实只用一个字节就够了,unicode编码写英文时多了一个字节,浪费存储空间。因而unicode开发了通用转换格式(Unicode Transformation Format(UTF)),常见的有utf-8或者utf-16;

encode decode

1)encode的作用是,将unicode对象编码成其他编码的字符串,str.encode('utf-8'),编码成UTF-8;(2)decode的作用是将其他编码的字符串转换成Unicode编码,str.decode('UTF-8');

import chardet 查阅具体的编码类型,chardet.detect(str),但是str不能是unicode编码类型,但是该方法 不接受 本来已经是unicode的编码的 参数,会有TypeError: Expected object of type bytes or bytearray, got: 错误;

作为统一标准,unicode不能再被解码,如果UTF-8想转至其他非unicode,则必须(2)先decode 到unicode,在encode到其他非unicode的编码。

解析出的汉字是:'\xe4\xb8\xad\xe5\x9b\xbd' 这种形式的(GBK编码),输出后就变成乱码了,所以应该先将其GBK解码,然后再UTF-8编码,然后再输出:

decode('gbk').encode('utf-8')

输入一个汉字时通常要先对其UTF-8解码,然后再GBK编码:

decode('utf-8').encode('gbk')

在json.dump or dumps 方法中输出中文:

importjsonimportsys

reload(sys)

sys.setdefaultencoding('utf-8')

json_res= json.load(open('mrc - predictions.json', 'r', encoding='utf-8'))

json.dump(json_res, open("json_res", "w"), ensure_ascii=False)

dump()的第一个参数是要序列化的对象,第二个参数是打开的文件句柄,注意文件打开open()时加上以UTF-8编码打开,在dump()的时候也加上ensure_ascii=False,不然会变成ascii码写到json文件中json.dump(all_house,f,ensure_ascii=False,sort_keys=True, indent=4)

json.dumps()/json.loads()等用法

json_str = json.dumps(all_house,ensure_ascii=False); #all——books 为列表、字典等python自带的数据结构,将其写成json#print json_str; #[{"brokername": "小宝贝"},{},{}]

new_dict = json.loads(json_str);#主要是读json文件时,需要用到#print new_dict; #{u'house_area': u'95', u'build_year': u'2005'}

json.dumps() 是将一个Python数据结构转换为一个JSON编码的字符串,

{"name": "shonababy"}

json.loads() 是将一个JSON编码的字符串(字典形式)转换为一个Python数据结构,{u'name': u'shonababy'}

dumps转化后键与值都变成了双引号,而在loads后变成python变量时,元素都变成了单引号,并且字符串前加多了个u。

一般要求当要字符串通过loads转为python数据类型时,得外层用单引号,里面元素key和value用双引号。

sort_keys:根据key排序

dump与dumps的区别

dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)

dump将一个对象序列化存入文件,dump需要一个类似于文件指针的参数(并不是真的指针,可称之为类文件对象),可以与文件操作结合,也就是说可以将dict转成str存入文件中,如json.dump(all_house,f,ensure_ascii=False,sort_keys=True, indent=4)中的f表示一个数据待写入的json文件句柄;

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)

而dumps(str)直接给的是str,也就是直接将字典转成str,无需写入文件,类似一个数据格式的转换方法,将python字符串转成json字典。

所以dumps是将dict转化成str格式,loads是将str转化成dict格式。

dump和load也是类似的功能,只是与文件操作结合起来了。

f=open('net_saving_data.txt','w',encoding='utf-8');for item inall_house:#house_area=item['house_area'];

#price=item['price'];

output='\t'.join([str(item['house_area']),str(item['price']),str(item['build_year']),str(item['house_title'])]);

f.write(output);

f.write('\n');

f.close();

中文写入txt、json文件是无非就是open()文件时,需要添加utf-8,dump()时,需要添加ensure_ascii=False,防止ascii编码(此外注意python版本问题)

读取网页数据的时候,查看网页的charset,及chardet库对编码类型的查询,及时进行decode和encode的编码转化,应该就能避免很多编码问题了。

问题:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u5e74' in position 33: ordinal not in range(256)

解决

data = "\u3010\u6f14\u5531\u4f1a\u30112000-\u62c9\u9614\u97f3\u4e50\u4f1a".encode("utf-8").decode("utf-8")print(type(data))print(data)

C:\Python36\python.exe E:/work/1st_duty/demo3.py【演唱会】2000-拉阔音乐会

python2 解决TypeError: 'encoding' is an invalid keyword argument for this function

环境:python2.7

代码示例:

with open('1.txt','r',encoding='utf-8') as f:

lines = f.readlines()

for line in lines:

line =line.strip()

使用with open() as f 语句提示错误:

TypeError: 'encoding' is an invalid keyword argument for this function

解决办法:

import io

with io.open('1.txt','r',encoding='utf-8') as f:

lines = f.readlines()

for line in lines:

line =line.strip()

python字符串添加元素_python 中字符串处理相关推荐

  1. python字符串添加元素_python向字符串中添加元素的实例方法

    Python中的字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,即python中字符串对象不可更改,但字符串对象的引用可更改,可重新指向新的字符串对象. + 直接字符串外+ ...

  2. python list排序_Python中字符串List按照长度排序

    下面看下字符串List按照长度排序(python)的实现方法 myList = ['青海省','内蒙古自治区','西藏自治区','新疆维吾尔自治区','广西壮族自治区'] 1.首先得到每个字符串长度 ...

  3. python 逗号赋值_python中字符串赋值 逗号_四、python字符串

    4.1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最大值.最小值)都适用于字符串. 字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的. 4.2.设置字符串的格式 ...

  4. python 字符串操作_python中字符串的常见操作(一)

    如有字符串: str1 = '192.168.1.1' str2 = 'asdfghjk' str3 = 'Asd fg hj ki' str4 = ' ' str5 = '' 以下是常见操作: # ...

  5. python离散化方法_python中字符串离散化的例子

    ''' 问题: 1.假设DataFrame中有一列名为type,其字段中内容为a,b,c 等用,隔开的值,如: type a,b,c a,f,x b,c,e ... 统计type中每个类型出现的次数 ...

  6. pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(specific column string length)

    pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(select dataframe rows based on specific colum ...

  7. python中等于号可以用is代替_python中字符串比较使用is、==和cmp()总结

    经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子的. 所以作为慢慢要转换到用 Python 写脚本,这些基本的东西必须要掌握 ...

  8. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

  9. python字符串转义序列_Python | 忽略字符串中的转义序列

    python字符串转义序列 First see, how escape sequence works? 首先看,转义序列如何工作? In the below example, we are using ...

最新文章

  1. flutter怎么手动刷新_flutter局部刷新的实现示例
  2. 论文浅尝 - AAAI2020 | 从异质外部知识库中进行基于图的推理实现常识知识问答...
  3. flowgraph java_如何在TensorFlow import_graph_def期间更改输入的维度
  4. bat 两个文本字符替换_Excel中最全最实用的文本函数公式大全
  5. CSS浮动为什么不会遮盖同级元素
  6. inDesign教程,如何创建杂志风标注?
  7. 最好用的HDR图像处理器——Photomatix Pro新功能介绍及使用教程
  8. python爬虫学习7:读取起点排行榜数据
  9. FIFO调度算法和LRU算法
  10. 如何让MAC只显示外接屏幕!
  11. (20191227已解决)从Linux服务器下载超过4G的文件并批量操作同类型文件
  12. 最优传输论文(十四):Generative Adversarial Nets论文原理
  13. RMAN恢复Oracle数据库到不同的服务器
  14. hive难点以及例子SXT
  15. 山西大学生计算机设计大赛,2017中国大学生计算机设计大赛山西赛区决赛在中北大学成功举办...
  16. C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
  17. windows cmd字典
  18. Proteus 8 Professional跑Keil uVision4的文件
  19. lrs_set_recv_timeout
  20. 怎么查看qq登陆记录

热门文章

  1. ShaderToy上后处理练习1——故障
  2. Java实现定时任务方法之Quartz
  3. sql 找到上一次_干货 | 想成为商业分析师/数据分析师, SQL竟成硬门槛?
  4. 在 PowerShell 中使用 SQL Server (1)
  5. 单点触控、多点触控和自定义控件的使用
  6. ThinkPad键盘上的小红点是干嘛的?
  7. 001 电商平台核心链路_整体架构设计
  8. 肺部CT图像分割及重建系统
  9. letvx500版本android,乐视 LetvX500 开启USB调试模式
  10. Unity的MonoBehaviour单例设置