关闭

Python核心数据类型——元祖、文件及其他

标签: Python元祖文件
1247人阅读 评论(0) 收藏 举报
分类:

最后一个Python集合类型——元组(tuple)

属性如下:
任意对象的有序集合
通过偏移存取
属于不可变序列类型
固定长度、异构、任意嵌套
对象引用的数组

实际应用中的元组:

>>> (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))
元组的特殊语法:逗号和圆括号

因为圆括号也可以把表达式括起来,如果圆括号里的单一对象是元组对象而不是一个简单的表达式,需要对Python进行特别说明,如果确实想得到一个元组,只要在这一单个元素之后、关闭圆括号之前加一个逗号就可以了。
>>> x = (40)
>>> x
40
>>> y = (40,)
>>> y
(40,)
作为特殊情况,在不会引起语法冲突的情况下,Python允许忽略元组的圆括号
===========================================================================================

转换、方法以及不可变性

如果你想对元组进行排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法的权限,或者使用新的sorted内置方法,它接受任何序列对象:

>>> T = ('cc','aa','dd','bb')
>>> T.sort()
Traceback (most recent call last):
  File "<pyshell#91>", line 1, in <module>
    T.sort()
AttributeError: 'tuple' object has no attribute 'sort'
>>> tmp = list(T)
>>> tmp.sort()
>>> tmp
['aa', 'bb', 'cc', 'dd']
>>> T = tuple(tmp)
>>> T
('aa', 'bb', 'cc', 'dd')
>>> sorted(T)
['aa', 'bb', 'cc', 'dd']
列表解析也可用于元组的转换。例如,下面这个由元组生成的列表,过程中将每一项都加上20:

>>> T = (1,2,3,4,5)
>>> L = [x +20 for x in T]
>>> L
[21, 22, 23, 24, 25]
【列表解析是名副其实的序列操作——它们总会创建新的列表,但也可以用于遍历包括元组、字符串以及其他列表在内的任何序列对象。我们将会看到,列表解析甚至可以用在某些并非实际储存的序列之上——任何可遍历的对象都可以,包括可自动逐行读取的文件】

===========================================================================================
文件
内置open函数会创建一个Python文件对象,可以作为计算机上的一个文件链接

操作 解释
output=open(r'C:\spam','w') 创建输出文件(‘w’是指写入)
input=open('data','r') 创建输入文件(‘r’是指读写)
input=open('data') 与上一行相同(‘r’是默认值)
aString=input.read() 把整个文件读进单一字符串
aString=input.read(N) 读取之后的N个字节(一个或多个)到一个字符串
aString=input.readLine() 读取下一行(包括行末标识符)到一个字符串
aList=input.readlines() 读取文件到字符串列表
output.write(aString) 写入字节字符串到文件
output.writelines(aList) 把列表内所有的字符串写入文件
output.close() 手动关闭(当文件收集完成时会替你关闭文件)
output.flush() 把输出缓冲区刷到硬盘中,但不关闭文件
anyFile.seek(N) 修改文件位置到偏移量N处以便进行下一个操作
for line in open('data'):use line 文件迭代器一行一行地读取
open('f.txt',encoding='latin-1') Python3.0 Unicode文本文件(str字符串)
open('f.bin','rb') Python3.0二进制byte文件(bytes字符串)

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

打开文件

为了打开一个文件,程序会调用内置open函数,首先是外部名,接着是处理模式。模式典型地用字符串‘r’代表为输入打开文件(默认值),‘w’代表为输出生成并打开文件,‘a’代表为在文件尾部追加内容而打开文件。

-----------------------------------------------------------------------------------------------------------------------------------------------------------
使用文件

基础用法提示:
文件迭代器是最好的读取行工具
内容是字符串,不是对象
close是通常选项
文件是缓冲的并且是可查找的

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

实际应用中的文件

>>> 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()
''
注意第三个readline调用返回一个空字符串,这是Python文件方法告诉我们已经到达文件底部(文件的空行是含有新行符的字符串,而不是空字符串)

如果想要显示带有行末字符解释的文件内容,用文件对象的read方法把整个文件读入到一个字符串中,并打印它:

>>> 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
【int和一些其他转换方法会忽略数字旁边的空白】
【eval函数能够把字符串当作可执行程序代码(从技术上讲,就是一个含有Python表达式的字符串)】
-----------------------------------------------------------------------------------------------------------------------------------------------------------
pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,也并不要求我们把字符串转换来转换去,它就好像是超级通用的数据格式化的解析工具。例如,想要在文件中储存字典,就直接用pickle来储存。

>>> D ={'a':1,'b':2}
>>> F = open('datafile.pkl','wb')
>>> import pickle
>>> pickle.dump(D,F)
>>> F.close()
之后,将来想要取回字典时,只要简单地再用一次pickle进行重建就可以了:
>>> F = open('datafile.pkl','rb')
>>> E = pickle.load(F)
>>> E
{'a': 1, 'b': 2}
我们取回等价的字典对象,没有手动断开或转换的要求。pickle模块执行所谓的对象序列化(object serialization),也就是对象和字节字符串之间的相互转换。
===========================================================================================

重访类型分类

现在我们已经看到所有实际中的Python核心内置类型,让我们再看一看它们所共有的一些属性,以此来结束我们的对象类型之旅。

1.对象根据分类来共享操作;例如,字符串、列表和元组都共享诸如合并、长度和索引等序列操作;
2.只有可变对象(列表、字典和集合)可以在原处修改;我们不能原处修改数字、字符串或元组
3.集合类似于一个无值的字典的键,但是,它们不能映射为值,并且没有顺序;因此,集合不是一个映射类型或者序列类型。

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

“==”操作符测试值的相等性。Python运行相等测试,递归地比较所有内嵌对象。
“is”操作符测试对象的一致性。Python测试二者是否是同一个对象(也就是说,在同一个内存地址中)

数字如果为非零,则为真
其他对象如果非空,则为真

留意循环数据结构:如果遇到一个复合对象包含指向自身的引用,就称之为循环对象。无论何时Python在对象中检测到循环,都会打印成[...],而不会陷入无限循环

#这样可以交换元素值
>>> X = 'spam'
>>> Y = 'eggs'
>>> X,Y = Y,X
>>> X
'eggs'
>>> Y
'spam'
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:338512次
    • 积分:5307
    • 等级:
    • 排名:第5102名
    • 原创:152篇
    • 转载:39篇
    • 译文:5篇
    • 评论:46条
    GitHub
    博客专栏
    JavaWeb框架

    文章:6篇

    阅读:13793
    XML

    文章:7篇

    阅读:26216
    Servlet

    文章:24篇

    阅读:60985
    Python3

    文章:44篇

    阅读:76234
    最新评论