Python基础之:Python中的IO
3 / 2 = 1.5IO就是输入和输出,任何一个程序如果和外部希望有交互的话,都需要使用到IO。相对于ja而言,Python中的IO更加的简单,易用。
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的区别 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 " 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) ----> 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的特点如下: 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,可以来老 男 孩 教 育~ 关于编码和乱码的问题,我简单讲一下。 通常问这类问题的人是混淆了若干个不同的概念,并且他们自己也没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 举报,一经查实,本站将立刻删除。python3.4学习笔记 3.x和2.x的区别,持续更新
python的特点
Python2.7 中文字符编码,使用Unicode时,选择什么编码格式
虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。