1. 首页 > 学习资讯 >

python字符串转字节_python字符转字节的方法

Python基础之:Python中的IO

3 / 2 = 1.5

IO就是输入和输出,任何一个程序如果和外部希望有交互的话,都需要使用到IO。相对于ja而言,Python中的IO更加的简单,易用。

python字符串转字节_python字符转字节的方法python字符串转字节_python字符转字节的方法


python字符串转字节_python字符转字节的方法


python字符串转字节_python字符转字节的方法


本文将会详细介绍Python中的IO作。

linux中有三种标准输入输出,分别是STDIN,STDOUT,

STDERR,对应的数字是0,1,2。

STDIN是标准输入,默认从键盘读取信息;

STDOUT是标准输出,默认将输出结果输出至终端;

STDERR是标准错误,默认将输出结果输出至终端。

我们常用的 2>&1,指将标准输出、标准错误指定为同一输出路径 。

python中,我们可以使用print方法来输出信息。

我们看下print函数的定义:

print函数将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end。 sep, end, file 和 flush 如果存在,那么必须以关键字参数的形式给出。

所有非关键字参数都会被转换为字符串,并会被写入到流,以 sep 分割,并在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None,这意味着使用默认值。 如果没有给出 objects,则 print() 将只写入 end。

file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print()不能用于二进制模式的文件对象。 对于这些对象,可以使用 file.write(...)。

输出是否被缓存通常决定于 file,但如果 flush 关键字参数为真值,输出流会被强制刷新。

可以看到print的输出格式还是比较简单的。我们接下来看一下怎么丰富输出的格式。

如果想要格式化字符串,可以在字符串的开始引号之前加上 f 或 F。

这样的话,我们可以直接在字符串中引入变量值,只需要把变量放在 { 和 } 中间即可。

除了在{ }中放入Python变量之外,还可以在其中放入函数:

在 ':' 后传递一个整数可以让该字段成为最小字符宽度。方便列对齐:

{ }中的变量后面还可以跟着转值符号:'!a' 表示应用 ascii() ,'!s' 表示应用 str(),还有 '!r' 表示应用 repr():

除此之外,str本身自带一个功能强大的format 函数:

调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域,每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

再看一个使用索引的例子:

看一个关键字的例子:

再看一个组合的例子:

还有非常复杂的组合的例子:

或者使用 '' 符号将 table 作为关键字参数传递:

还可以使用n类型 '{:n}' 来格式化数字:

如果我们只是想要将Python对象转换为字符串,那么可以使用repr()或者str(), str() 函数是用于返回人类可读的值的表示,而 repr()是用于生成解释器可读的表示。

举个例子:

str对象还提供了一些对字符串进行手动格式化的方法:

如果输入的字符串太长,它们不会截断字符串,而是原样返回。

如果想保证字符串的长度,则可以使用切片: x.ljust(n)[:n] 。

还可以使用str.zfill()来用0填充字符串:

% 也可以用来格式化字符串,给定 'string' % values,则 string 中的 % 实例会以零个或多个 values 元素替换。 此作通常被称为字符串插值。

python中文件读取非常简单,使用open()方法即可。

open()会返回一个文件对象。我们看一下它的定义:

个参数是文件名。

第二个参数是文件打开的模式,可用的模式有:

默认模式为 'r' 。

看一个open文件的例子:

文件打开了,自然需要被关闭,所以我们需要显示调用 f.close() 方法:

有没有类似ja中的try with resource的自动关闭文件的功能呢?

我们可以使用with,这样文件在使访问字符串的值用完毕之后,会自动被关闭,非常的好用。

文件被关闭之后,如果想要再次读取,就会报错:

获取到文件对象之后,我们就可以调用文件中的方法了。

f.read(size) 会读取一些数据并将其作为字符串(在文本模式下)或字节串对象(在二进制模式下)返回。

size 是一个可选的数值参数。 当 size 被省略或者为负数时,将读取并返回整个文件的内容;当取其他值时,将读取并返回至多 size 个字符(在文本模式下)或 size 个字节(在二进制模式下)。 如果已到达文件末尾,f.read() 将返回一个空字符串 ('')。

f.readline() 从文件中读取一行;换行符(n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的一行省略。如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 'n' 表示,该字符串只包含一个换行符。

还有一种更加简单的读取方法,就是从文件中遍历:

如果你想以列表的形式读取文件中的所有行,你也可以使用 list(f) 或 f.readlines()。

如果是在文本模式下,那么在写入文件之前,需要把对象转换成为文本形式,我们可以使用str()来进行转换。

使用f.seek(offset, whence)可以定位文件指针的位置,然后后续会从该位置开始进行读取作。

whence 的 0 值表示从文件开头起算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。 whence 如果省略则默认值为 0,即使用文件开头作为参考点。

JSON是一个很方便进行信息交流的文件格式。我们看下怎么使用JSON来将对象转换为字符串:

dumps是将对象转换为json str。 json还有一个dump方法,可以直接将对象存入到文件中。

JSON 中的键-值对中的键永远是 str类型的。当一个对象被转化为 JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。

python定义一个单字节类型数组

| 20 |

Python中没有数组的数据结构,但列表很像数组。

print "4 - a 小于 b"

字节(字节数组)是二进制数据组成的序列,其中每个元素由8bit二进制即1byte亦即2位十六进制数亦亦即0~255组成,字节是计算机的语言,字符串是人类语言,它们之间通过编码表形成一一对应的关系。

python关于struct的问题

整个代码是把data每两个字符变成一个字节,比如"7F"变成一个值127的byte。struct.pack()参数B指按Byte转换。输出的byte_dat是一个字节串,类似b"xEF"。

+号的含义因该是拼接,把后转换的一个字节拼接在之前积累的数据后面。b""前缀是字节串,不是字符串。

struct:一种构造数据类型递归地对目录进行更名,也可以对文件进行更名。 |在Python shell下输入

怎么在Python里使用UTF-8编码

py文件的行加入

#coding=utf-8

一个完整的开头应该是这个样子的:

#! usr/bin/python

#coding=utf-8 //这句是使用utf8编码方式方法, 可以单独加入python头使用。

# -- coding:cp936返回相关文件的系统配置信息。 | --

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

sys.path.append("../pythonLib/")

import os, stringelse:

import json

import time

from time import

希望可以帮到你。

python中把ISO-8859-1编码转化为UTF-8

返获取用户输入回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。 |

当我们爬取一些页面的中文信息时,会出现如下情况:

爬取的中文编码格式不是UTF-8,无常显示,查看编码格式:

先编码

encode(编码):按照某种规则将“文本”转换为“字节流”,unicode转化为str

decode(解码):将“字节流”按照某种规则转换成“文本”,str转化为unicode

s.decode(' '):运行会出错。因为python 3中的str类型对象有点像Python 2中的unicode, 而decode是将str转为unicode编码,所以str一个encode方法,调用这个方法后将产生一个编码后的byte类型的字符。

AttributeError: 'str' object has no attribute 'decode'

AttributeError: 'bytes' object has no attribute 'encode'

python2和python3的区别,转换及共存

在2.x中except Exception,e : 3.x中改为except (Exception):

python2和python3的区别

os.major(dev)

1.性能

Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形作上可以取得很好的优化结果。

Py3.1性能比Py2.5慢15%,还有很大的提升空间。

2.编码

Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:

>>> = 'china'

>>>print()

china

3. 语法

1)去除了<>,全部改用!=

在Python 2里,为了得到一个任意对象的字符串表示,有一种把对象包装在反引号里(比如`x`)的特殊语法。在Python 3里,这种能力仍然存在,但是你不能再使用反引号获得这种字符串表示了。你需要使用全局函数repr()。

Python 3 ①

`x` repr(x) ②

`'PapayaWhip' + `2`` repr('PapayaWhip'+ repr(2))

Note:x可以是任何东西 — 一个类,函数,模块,基本数据类型,等等。repr()函数可以使用任何类型的参数。

2)去除``,全部改用repr()

3)加入as 和with,还有True,False,None

4)整型除法返回浮点数,要得到整型结果,请使用//

所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from __future__ import division来使用Python 3的除法)。

print '3 / 2 =', 3 / 2 print '3 // 2 =', 3 // 2 print '3 / 2.0 =', 3 / 2.0 print '3 // 2.0 =', 3 // 2.0

3 / 2 = 1 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0

默认,如果两个作数都是整数,Python 2 自动执行整型计算。

Python 3

print('3 / 2 =', 3 / 2) print('3 // 2 =', 3 // 2) print('3 / 2.0 =', 3 / 2.0) print('3 // 2.0 =', 3 // 2.0)

3 / 2 = 1.5 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0

Note: 需要注意的是“双划线”(//)作符将一直执行整除,而不管作数的类型,这就是为什么 5.0//2.0 值为 2.0。Python 3 中,/ 作符是做浮点除法,而 // 是做整除(即商没有余数,比如 10 // 3 其结果就为 3,余数会被截除掉,而 (-7) // 3 的结果却是 -3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 作符一样。

5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量

6)print

去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数

在Python 2里,print是一个语句。无论你想输出什么,只要将它们放在print关键字后边就可以。

Python 3里,print()是一个函数。就像其他的函数一样,print()需要你将想要输出的东西作为参数传给它。

例如:

2.X: print "The answer is", 22

3.X: print("The answer is", 22)

2.X: print x, # 使用逗号结尾禁止换行

3.X: print(x, end=" ") # 使用空格代替换行

在Python 2里,如果你使用一个逗号(,)作为print语句的结尾,它将会用空格分隔输出的结果,然后在输出一个尾随的空格(trailing space),而不输出回车(carriage return)。在Python 3里,通过把end=' '作为一个关键字参数传给print()可以实现同样的效果。参数end的默认值为'

',所以通过重新指定end参数的值,可以取消在末尾输出回车符。

2.X: print # 输出新行

3.X: print() # 输出新行

2.X: print >>sys.stderr, "fatal error"

3.X: print("fatal error", file=sys.stderr)

在Python 2里,你可以通过使用>>pipe_name语法,把输出重定向到一个管道,比如sys.stderr。在Python 3里,你可以通过将管道作为关键字参数file的值传递给print()来完成同样的功能。参数file的默认值为std.stdout,所以重新指定它的值将会使print()输出到一个另外一个管道。

2.X: print (x, y) # 输出repr((x, y))

3.X: print((x, y)) # 不同于print(x, y)!

exec语句

exec()函数使用一个包含任意Python代码的字符串作为参数,然后就像执行语句或者表达式一样执行它。exec()跟eval()是相似的,但是exec()更加强大并更具有技巧性。eval()函数只能执行单独一条表达式,但是exec()能够执行多条语句,导入(import),函数声明 — 实际上整个Python程序的字符串表示也可以。

Python 3 ①

exec codeString exec(codeString) ②

exec codeString in a_global_namespace exec(codeString, a_global_namespace) ③

exec codeString in a_global_namespace, a_local_namespace exec(codeString, a_global_namespace, a_local_namespace) 在最简单的形式下,因为exec()现在是一个函数,而不是语句,2to3会把这个字符串形式的代码用括号围起来。

Python 2里的exec语句可以指定名字空间,代码将在这个由全局对象组成的私有空间里执行。Python 3也有这样的功能;你只需要把这个名字空间作为第二个参数传递给exec()函数。

更加神奇的是,Python 2里的exec语句还可以指定一个本地名字空间(比如一个函数里声明的变量)。在Python 3里,exec()函数也有这样的功能。

execfile语句

就像以前的exec语句,Python 2里的execfile语句也可以像执行Python代码那样使用字符串。不同的是exec使用字符串,而execfile则使用文件。在Python 3里,execfile语句已经被去掉了。如果你真的想要执行一个文件里的Python代码(但是你不想导入它),你可以通过打开这个文件,读取它的内容,然后调用compile()全局函数强制Python解释器编译代码,然后调用新的exec()函数。

Python 3 execfile('a_filename') exec(compile(open('a_filename').read(),'a_filename','exec'))

7)输入函数改变了,删除了raw_input,用input代替: Python 2有两个全局函数,用来在命令行请求用户输入。个叫做input(),它等待用户输入一个Python表达式(然后返回结果)。第二个叫做raw_input(),用户输入什么它就返回什么。这让初学者非常困惑,并且这被广泛地看作是Python语言的一个“肉赘”(wart)。Python 3通过重命名raw_input()为input(),从而切掉了这个肉赘,所以现在的input()就像每个人最初期待的那样工作。

2.X:guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法

3.X:guess = int(input('Enter an integer : '))

Note:如果你真的想要请求用户输入一个Python表达式,计算结果,可以通过调用input()函数然后把返回值传递给eval()。

I/O方法xreadlines()

在Python 2里,文件对象有一个xreadlines()方法,它返回一个迭代器,一次读取文件的一行。这在for循环中尤其有用。事实上,后来的Python 2版本给文件对象本身添加了这样的功能。

在Python 3里,xreadlines()方法不再可用了。2to3可以解决简单的情况,但是一些边缘案例则需要人工介入。

Python 3 ①

for line in a_file.xreadlines(): for line in a_file: ②

for line in a_file.xreadlines(5): no change (broken) 如果你以前调用没有参数的xreadlines(),2to3会把它转换成文件对象本身。在Python 3里,这种转换后的代码可以完成前同样的工作:一次读取文件的一行,然后执行for循环的循环体。

如果你以前使用一个参数(每次读取的行数)调用xreadlines(),2to3不能为你完成从Python 2到Python 3的转换,你的代码会以这样的方式失败:AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。你可以手工的把xreadlines()改成readlines()以使代码能在Python 3下工作。(readline()方法在Python 3里返回迭代器,所以它跟Python 2里的xreadlines()效率是不相上下的。) 8)改变了顺序作符的行为,例如x

9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了

10)新式的8进制字变量,相应地修改了oct()函数。

2.X的方式如下:

>>> 0666

>>> oct(438)

'0666'

3.X这样:

>>> 0666

SyntaxError: invalid token (

, line 1)

>>> 0o666

>>> oct(438)

'0o666'

11)增加了 2进制字面量和bin()函数

>>> bin(438)

'0b110110110'

>>> _438 = '0b110110110'

>>> _438

'0b110110110'

12)扩展的可迭代解包。在Py3.X 里,a, b, rest = seq和 rest, a = seq都是合法的,只要求两点:rest是list对象和seq是可迭代的。

13)新的super(),可以不再给super()传参数,

>>> class C(object):

def __init__(self, a):

print('C', a)

>>> class D(C):

def __init(self, a):

super().__init__(a) # 无参数调用super()

>>> D(8)

C 8

<__main__.D object at 0x00D7ED90>

14)支持class decorator。用法与函数decorator一样:

>>> def foo(cls_a):

def print_func(self):

print('Hello, world!')

cls_a.print = print_func

return cls_a

>>> @foo

class C(object):

pass

>>> C().print()

Hello, world!

class decorator可以用来玩玩狸猫换太子的大把戏。更多请参阅PEP 3129

4. 字符串和字节串

Python 2有两种字符串类型:Unicode字符串和非Unicode字符串。Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。

而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 3只有一种类型:Unicode字符串(Unicode strings)。只有str一种类型,但它跟2.x版本的unicode几乎一样。

Python 3 ①

u'PapayaWhip' 'PapayaWhip' ②

ur'PapayaWhipfoo' r'PapayaWhipfoo' Python 2里的Unicode字符串在Python 3里即普通字符串,因为在Python 3里字符串总是Unicode形式的。

Unicode原始字符串(raw string)(使用这种字符串,Python不会自动转义反斜线"")也被替换为普通的字符串,因为在Python 3里,所有原始字符串都是以Unicode编码的。

全局函数unicode()

Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。

Python 3只有一种字符串类型,Unicode字符串,所以str()函数即可完成所有的功能。(unicode()函数在Python 3里不再存在了。)

Python 3 unicode(anything) str(anything)

5.数据类型

1)Python 2有为非浮点数准备的int和long类型。int类型的值不能超过sys.maxint,而且这个值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。

在Python 3里,只有一种整数类型int,大多数情况下,它很像Python 2里的长整型。

Note:检查一个变量是否是整型,获得它的数据类型,并与一个int类型(不是long)的作比较。你也可以使用isinstance()函数来检查数据类型;再强调一次,使用int,而不是long,来检查整数类型。

sys.maxint

由于长整型和整型被整合在一起了,sys.maxint常量不再。但是因为这个值对于检测特定平台的能力还是有用处的,所以它被Python 3保留,并且重命名为sys.maxsize。

Python 3 ①

from sys import maxint from sys import maxsize ②

python3.4学习笔记 3.x和2.x的区别,持续更新

python3.4学习笔记(四) 3.x和2.x的区别

import lib2

ImportError: No module named 'lib2'

在python3.x里面,用lib.request代替lib2

import thread

ImportError: No module named 'thread'

在python3.x里面,用_thread(在前面加一个下划线)代替thread

============================在2.x中:print html,3.x中必须改成:print(html)=====

print函数

在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。

Python 2.7.6

print 'Python', python_version()

print 'Hello, World!'

print('Hello, World!')

print "text", ; print 'print more text on the same line'

输出:

Hello, World!

Hello, World!

text print more text on the same line

---------------------------

Python 3.4.1

print('Python', python_version())

print('Hello, World!')

print("some text,", end="")

print(' print more text on the same line')

输出:

Hello, World!

some text, print more text on the same line

print 'Hello, World!'

File "", line 1

print 'Hello, World!'

^SyntaxError: invalid syntax

注意:在Python中,带不带括号输出”Hello World”都很正常。

但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。

print 'Python', python_version()

print 'a', 'b'

Python 2.7.7

('a', 'b')

a b

---------------------------------

所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python

2环境下可能导致的错误(或与之相反,在Python 2脚本中用from __future__ import division来使用Python

3的除法)。

Python 2.7.6

3 / 2 = 1

3 // 2 = 1

3 / 2.0 = 1.5

3 // 2.0 = 1.0

Python 3.4.1

3 // 2 = 1

3 / 2.0 = 1.5

3 // 2.0 = 1.0

---------------------------------

Unicode

Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。

而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。

Python 2.7.6

print type(unicode('this is like a python3 str type'))

print type(b'byte type does not exist')

prin,加法运算t 'they are really' + b' the same'

they are really the same

print type(bytearray(b'bytearray oddly does exist though'))

Python 3.4.1 has

print('and Python', python_version(), end="")

print(' also has', type(bytearray(b'bytearrays')))

and Python 3.4.1 also has

1'note that we cannot add a string' + b'bytes for data'

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 'note that we cannot add a string' + b'bytes for data'

TypeError: Can't convert 'bytes' object to str implicitly

=================================

python 2.4 与 python 3.0 的比较

一、 print 从语句变为函数

原: print 1,2+3

改为: print ( 1,2+3 )

二、range 与 xrange

原 : range( 0, 4 ) 结果 是 列表 [0,1,2,3 ]

改为:list( range(0,4) )

原 : xrange( 0, 4 ) 适用于 for 循环的变量控制

改为:range(0,4)

三、字符串

原: 字符串以 8-bit 字符串存储

改为: 字符串以 16-bit Unicode 字符串存储

四、try except 语句的变化

五、打开文件

原: file( ..... )

或 open(.....)

改为:

只能用 open(.....)

六、从键盘录入一个字符串

原: raw_input( "提示信息" )

改为: input( "提示信息" )

七、bytes 数据类型

A bytes object is an immutable array. The s are 8-bit bytes, represented by integers in the range 0 <= x < 256.

bytes 可以看成是“字节数组”对象,每个元素是 8-bit 的字节,取值范围 0~255。

由于在 python 3.0中字符串以 unicode 编码存储,当写入二进制文件时,字符串无法直接写入(或读取),必须以某种方式的编码为字节序列后,方可写入。

(一)字符串编码(encode) 为 bytes

例: s = "张三abc12"

b = s.encode( 编码方式)

# b 就是 bytes 类型的数据

# 常用的编码方式为 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等

# 注 : 当字符串不能编码为指定的“编码方式”时,会引发异常

(二) bytes 解码(decode)为字符串

s = "张三abc12"

b = s.encode( "gbk") # 字符串 s 编码为 gbk 格式的字节序列

s1 = b.decode("gbk") # 将字节序列 b以gbk格式 解码为字符串

# 说明,当字节序列不能以指定的编码格式解码时会引发异常

(三)使用方法举例

#coding=gbk

f = open("c:1234.txt", "wb")

s = "张三李四abcd1234"

# -------------------------------

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

# -------------------------------

b = s.encode("gbk")

f.write( b )

f.close()

input("?")

读取该文件的例子:

#coding=gbk

f = open("c:1234.txt", "rb")

f.seek(0,2) #定位至文件尾

n = f.l() #读取文件的字节数

f.seek(0,0) #重新定位至文件开始处

b = f.read( n )

# ------------------------------

# 在 python 2.4 中 b 是字符串类型

# 要 python 3.0 中 b 是 bytes 类型

# 因此需要按指定的编码方式确码

# ------------------------------

s = b.decode("gbk")

print ( s )

# ------------------------------

# 在 python 2.4 中 可以写作 print s 或 print ( s )

# 要 python 3.0 中 必须写作 print ( s )

# ------------------------------

f.close()

input("?")

运行后应显示:

张三李四abcd1234

(四) bytes序列,一但形成,其内容是不可变的,例:

s="ABCD"

b=s.encode("gbk")

print b[0] # 显示 65

b[0] = 66

八、 chr( K ) 与 ord( c )

python 2.4.2以前

chr( K ) 将编码K 转为字符,K的范围是 0 ~ 255

ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 255

python 3.0

chr( K ) 将编码K 转为字符,K的范围是 0 ~ 65535

ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 65535

九、 除法运算符

python 2.4.2以前

10/3 结果为 3

python 3.0

10 / 3 结果为 3.3333333333333335

10 // 3 结果为 3

十、字节数组对象 --- 新增

(一) 初始化

a = bytearray( 10 )

# a 是一个由十个字节组成的数组,其每个元素是一个字节,类型借用 int

# 此时,每个元素初始值为 0

(二) 字节数组 是可变的

a = bytearray( 10 )

a[0] = 25

# 可以用赋值语句更改其元素,但所赋的值必须在 0 ~ 255 之间

(三) 字节数组的切片仍是字节数组

(四) 字符串转化为字节数组

#coding=gbk

s ="你好"

b = s.encode( "gbk") # 先将字符串按某种“GBK”编码方式转化为 bytes

c = bytearray( b ) #再将 bytes 转化为 字节数组

也可以写作

c = bytearray( "你好", "gbk")

(五) 字节数组转化为字符串

c = bytearray( 4 )

c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68

s = c.decode( "gbk" )

print ( s )

# 应显示: ABCD

(六) 字节数组可用于写入文本文件

#coding=gbk

f = open("c:1234.txt", "wb")

s = "张三李四abcd1234"

# -------------------------------

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

# -------------------------------

b = s.encode("gbk")

f.write( b )

c=bytearray( "王五","gbk")

f.write( c )

f.close()

input("?")

python的特点

Python的特点如下:

1、简单易学:PyNotesthon是一种代表简单主义思想的编程语言,阅读一个良好的Python程序的时候就犹如在读英语一样。Python的优势就是伪代码的本质,在开发的时候主要以解决问题为主要,并不是搞明白语言的本身。

2、面向对象:Python既是面向对象的1.什么是编码编程,也是面向对象编程,与其他主要的语言C++和Ja对比来说,Python是以一种非常强大而且简单的方式来实现面向对象的编程。

3、可移植性:Python具有开源的本质,可以被移植在许多的平台上,比如说Lnux、Windows、 FreeBSD、 Macintosh、

Solaris、OS/2、Amiga、AROS、AS/400等,Python都可以很好的运行其中。

4、解释性:Python语言写的程序不需要编译成为二进制的代码,可以直接从源代码运行程序,在计算机内部,Python解释器将源代码转换称为字节码的中间形式,可以直接翻译运行。

5、开源:Python语言是开源的。简单的来说,你可以自由发布这个软件的拷贝,阅读源代码,对它进行改动,用于新的自由软件之中。

6、高级语言:Python是高级编程语言,当使用Python进行编程的时候,无需考虑如何管理程序使用的内存一类的底层细节问题。

7、可扩展性:如果想要更快的运行,但是某些算法不公开,这个部分的程序可以选择用C语言进行编写,然后再Python程序中进行使用。

8、丰富的库:Python具有丰富强大的标准库,可以帮助你处理各种工作,其中包含了正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGl、FTP、电子邮件等,这些功能都是可以使用的,所以Python语言功能十分强大。

9、规范代码:在使用Python书写代码的时候采用强制缩进的方式让代码具有非常好的可读性。

Python不仅具有诸多特点,且在网络爬虫、游戏开发、人工智能、数据分析、Web开发等领域也得到了广泛的应用,更是转行的语言,如想要学习Python,可以来老 男 孩 教 育~

Python2.7 中文字符编码,使用Unicode时,选择什么编码格式

虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。

关于编码和乱码的问题,我简单讲一下。

通常问这类问题的人是混淆了若干个不同的概念,并且他们自己也没f.write(string) 会把 string 的内容写入到文件中,并返回写入的字符数。有意识到自己混淆了这些概念的。

终端显示字符的编码(windows下终端是cmd,linux下是各种terminal,远程登录是putty或者xshell)

shell环境的编码。比如中文版windows用的是gbk(向下兼容gb2312),大多数linux发行版使用的是utf-8(LANG=zh_CN.UTF-8)。

文本文件的编码。这个通常取决于你的编辑器,而且有的编辑器支持多种编码的话,你可以在文本开头位置指定编辑器使用特定编码。比如# -- coding: utf8 --,vim看到这行会默认将这个脚本认定为utf-8兼容编码格式。

应用程序的内部编码。一个字符串,作为数据只是一个字节数组,但是作为字符的数组,就有一个解析方式。ja和python的内部字符编码是utf-16,python和ja都支持用不同的编码来对字节数组进行decode来得到字符数组。

拿题主的问题来解释一下。

我在ubuntu kylin中文环境下默认terminal中做了同样的实验,但是结果和题主恰好相反:

看见没有?

题主和我都没有说谎,这是为什么呢?

那这里显示的看上去像“汉字”的,tmd的到底是个什么东西?

如果是在我的环境下,也就是linux utf-8环境下一个utf-8显示终端,能显示成“汉字”的这坨东西,它实际上是以utf-8编码的“汉”字和“字”字两个unicode字符。它们的真实字符值就是u'u6c49u5b57'(内码),可以用"汉字".encode("hex")来查看当前终端下(utf-8编码值)的十六进制码。

。所以我的命令是,。所以我的命令是,将'e6b189e5ad97'这坨字节数组,转换为unicode的字符数组。——结果毫无难度,没有错误,因为它本来就是utf-8编码,所以能够正常作为unicode字符解码。

在题主的环境下,因为系统终端和默认文件编码都是GBK,所以这个数实际上是

这个实际上是gbk(兼容gb2312)的字符“汉字”的真实字节数组。这个实际上是gbk(兼容gb2312)的字符“汉字”的真实字节数组。

题主现在弄了一个文件,在开始加上了

所以,要能够正常的显示中文(或者其他什么乱七八糟奇葩的多字节文字),以下条件缺一不可:

编辑器能够认识文本编码

系统拥有能显示这种字符的字体。

这也就是我为什么一直反对在程序文本中使用除ascii之外的所有编码字符的原因。环境太复杂了,绕开问题远比解决问题轻松。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息