您的位置:首页 > 编程语言 > Python开发

Python学习笔记07

2016-04-23 19:05 555 查看

chapter_7

元组,文件及其他

元组

元组的一般操作

元组支持字符串和列表的一般序列操作

>>> (1, 2)+(3, 4)
(1, 2, 3, 4)
>>> (1, 2) * 4
(1, 2, 1, 2, 1, 2, 1, 2)
>>> T = (1,2,3,4)
>>> T[0],T[1:3]
(1, (2, 3))


元组独有的方法

>>> T = (1,2,3,2,4,2)
>>> T.index(2) #获取第一个2的索引值
1
>>> T.index(2,4) #获取索引值4之后第一次出现2的索引值
5
>>> T.count(2) #统计元组中2出现的次数
3


创建元组的注意点

>>> x = (40) #结果是一个整数,不是一个元组
>>> x
40
>>> y = (40,) #在后面加一个逗号,生成一个元组对象
>>> y
(40,)


元组的排序(元组转列表)

>>> T = ('cc','aa','dd','bb')
>>> tmp = list(T) #元组转列表
>>> tmp.sort()
>>> tmp
['aa', 'bb', 'cc', 'dd']
>>> T = tuple(tmp) #列表转元组
>>> T
('aa', 'bb', 'cc', 'dd')
>>> sorted(T,reverse = True) #直接对元组进行排序返回列表
['dd', 'cc', 'bb', 'aa']


#列表解析方式转换
>>> T = (1,2,3,4,5)
>>> L = [x + 20 for x in T]
>>> L
[21, 22, 23, 24, 25]


元组注意事项

元组的不可变性只适用于元组本身顶层,并非其内容.例如元组内部的列表是可以像往常那样修改.

>>> T = (1,[2,3],4)
>>> T[1] = 'spam' #不可在元组顶层进行修改
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> T[1][0] = 'spam' #可以对元组内部的列表进行修改
>>> T
(1, ['spam', 3], 4)


文件

文件的概念: 计算机中由操作系统管理的具有名字的存储区域.

内置 open( ) 函数会创建一个Python文件对象,可以作为计算机上的一个文件链接,在调用open之后,你可以通过调用返回文件对象的方法来读写相关的外部文件.

open( )函数的详细写法: open(外部名,处理模式)

处理模式:

‘r’输入读取文件,默认模式
‘w’输出写入文件
‘a’打开文件并在文件尾部追加内容
在模式字符串尾部加上’b’可以进行二进制处理,如 rb,wb,ab

加上’+’号意味着同时为输入和输出打开文件(也就是说,我们可以对相同文件对象进行读写,往往使用在对文件进行先查找,后修改的操作中)

实际应用中的文件

>>> myfile = open('myfile.txt','w') #以写的模式创建并打开文件
>>> myfile.write('hello text file\n') #往文件中写入内容
16
>>> myfile.write('goodbye text file\n')
18
>>> myfile.close() #关闭文件

>>> myfile = open('myfile.txt','r') #以读的模式打开文件
>>> myfile.readline() #读取文件中的一行内容
'hello text file\n'
>>> myfile.readline() #读取下一行
'goodbye text file\n'
>>> myfile.readline() #读取到文件结尾,内容为空
''


>>> open('myfile.txt').read() #以文本的形式读取文件所有的内容
'hello text file\ngoodbye text file\n'
>>> print(open('myfile.txt').read()) #将读取的内容打印出来
hello text file
goodbye text file


如果想要一行一行的扫描一个文本文件,文件迭代器往往是最佳的选择

>>> for line in open('myfile.txt'):
...   print(line,end='')
...
hello text file
goodbye text file


Python 3.0中的文本和二进制文件

文本文件把内容表示为常规的str字符串,自动执行Unicode编码和解码,并且默认执行末行转换.

二进制文件把内容表示为一个特殊的bytes字符串类型,并且允许程序不修改地访问文件内容.

与Python2.6 的区别:

Python 2.6 文本文件处理8位文本和二进制数据,并且有一种特殊的字符串类型和文件接口(unicode字符串和odecs.open) 来处理Unicode文本.

Python 3.0 中的区别源自于简单文本和Unicode文本都合并为一种常规字符串类型.

在文件中存储并解析Python对象

>>> X,Y,Z = 43,44,45
>>> S = 'Spam'
>>> D = {'a': 1,'b': 2}
>>> L = [1,2,3]
>>>
>>> F = open('datafile.txt','w')
>>> F.write(S + '\n')
5
>>> F.write('%s,%s,%s\n' % (X,Y,Z))
9
>>> F.write(str(L) + '$' + str(D) + '\n')
27
>>> F.close()
>>>
>>>
>>> chars = open('datafile.txt').read()
>>> chars
"Spam\n43,44,45\n[1, 2, 3]${'a': 1, 'b': 2}\n"
>>> print(chars)
Spam
43,44,45
[1, 2, 3]${'a': 1, 'b': 2}

#解析字符串对象
>>> F = open('datafile.txt')
>>> line = F.readline()
>>> line
'Spam\n'
>>> line.rstrip()
'Spam'

#解析数字对象
>>> line = F.readline()
>>> line
'43,44,45\n'
>>> parts = line.split(',')
>>> parts
['43', '44', '45\n']
>>> int(parts[1])
44
>>> numbers = [int(P) for P in parts]
>>> numbers
[43, 44, 45]

#解析列表和字典对象
#通过内置 eval() 方法来转换文件存储的列表和字典
>>> line = F.readline()
>>> line
"[1, 2, 3]${'a': 1, 'b': 2}\n"
>>> parts = line.split('$')
>>> parts
['[1, 2, 3]', "{'a': 1, 'b': 2}\n"]
>>> eval(parts[0])
[1, 2, 3]
>>> objects = [eval(P) for P in parts]
>>> objects
[[1, 2, 3], {'a': 1, 'b': 2}]


用pickle存储Python原生对象

pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,并不需要我们把字符串转换来转换去.

pickle模块执行对象序列化,也就是对象和字节字符串之间的相互转换.

>>> D = {'a': 1,'b': 2}
>>> F = open('datafile.pkl','wb')
>>> import pickle
>>> pickle.dump(D,F) #将对象存储到文件中
>>> F.close()
>>>
>>> F = open('datafile.pkl','rb')
>>> E = pickle.load(F) #从文件中读取回对象
>>> E
{'a': 1, 'b': 2}

>>> open('datafile.pkl','rb').read() #文件内部保存对象的内容
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: