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’ | 打开文件并在文件尾部追加内容 |
加上’+’号意味着同时为输入和输出打开文件(也就是说,我们可以对相同文件对象进行读写,往往使用在对文件进行先查找,后修改的操作中)
实际应用中的文件
>>> 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.'
相关文章推荐
- [python]爬代理ip v2.0(未完待续)
- python中的json模块
- 利用Python与HFSS联合仿真设计一个微带天线
- Python实现用filter()过滤出1~100中平方根是整数的数
- python时间处理模块 datetime time模块 deltetime模块
- Python 中re模块学习(转)
- Python 中的 else详解
- Python排序算法之快速排序
- Python 易犯错误
- Python 脚本帮你找出微信上删除了你的“好友“
- Python 脚本帮你找出微信上删除了你的“好友“
- python的装饰器
- python异常处理
- python--psutil系统信息模块
- knn python
- python中的迭代器
- python中的生成器
- python 生成器yield
- python字典update()方法
- Python:Argparse