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

原创 2015年11月17日 22:05:56

最后一个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'
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python中的列表,元祖,字典,等基本数据类型的操作

与c语言的中数组不同的python的列表可以存储不同的数据类型,在c和oc中我们定义一个 数组是这样的 int a[] = {1,2,4,6} 在oc中我们是这样定义数组的 NSArray *ar...

Python基础——核心数据类型_文件

创建 文件对象的创建比较特殊,没有用于创建文件对象的常量语法。file = open(filename, mode)方法 f.write(str) f.read():读取文件中的内容,以字符串格...

Python核心数据类型——数字

本文介绍Python中数字这一核心数据类型,介绍了hex(I),oct(I),bin(I)三个内置转换函数、复数的表示方法、除法(传统除法、Floor除法和真除法)、eval函数 ;介绍了内置的mat...
  • ggGavin
  • ggGavin
  • 2015年11月09日 17:06
  • 1278

Python基础——核心数据类型_序列_字符串

2、 序列容器是包含其他对象的任意对象,序列及映射(字典)是常见的容器,序列中的每个元素都对应一个位置,而映射中的元素都对应一个键。集合(set)也是容器的一种。序列是python中的最基本的数据结构...

Python核心数据类型(内置对象)—— 列表(list)

list 的分片(slice) 通过指定 2 个索引得到 list 的子集, 叫做一个“slice”。返回值是一个新的 list, 它包含了 list 中按顺序从第一个 slice 索引开始, 直到但...

Python核心数据类型——字符串(2)

本文继续介绍Python字符串,介绍了字符串转换工具int、str等内置函数,介绍了字符串代码转换ord、chr内置函数,介绍了修改字符串的方法,介绍了常用字符串方法replace、join和spli...
  • ggGavin
  • ggGavin
  • 2015年11月14日 13:37
  • 1088

Python核心数据类型(内置对象)—— 元组(tuple)

元组: 元组对象(tuple),是一个不可改变的序列(提供了完整性的约束)。圆括号为操作符,支持任意类型、任意嵌套以及常见的序列操作。 >>> T = (1,2,3,4)   # 创建一个元组 >>...

Python核心数据类型——列表与字典

本文介绍了Python的核心数据类型——列表和字典,介绍了列表的分片赋值、列表排序、extend和pop方法以及del删除操作;介绍了字典解析的应用、创建字典的几种方法、排序字典键和in成员测试...
  • ggGavin
  • ggGavin
  • 2015年11月17日 21:38
  • 1152

Python从入门到放弃(二):核心数据类型

Ⅰ.入门 一.一些概念 1.Python中,数据是以对象的形式出现的。  2.对象无非是内存中的一部分,包含数值和相关操作的集合。(其实就和传统的面向对象的说法或者说是特点是一样...
  • Sara_YF
  • Sara_YF
  • 2016年09月16日 00:58
  • 226

Java核心技术——Java语法和数据类型

一、骆驼命名法:类名以大写字母开头,每个单词第一个字母都大写 二、根据Java语言规范,main方法必须声明为public,main方法必须有一个外壳类,main方法必须是静态的。 三、Java中一共...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python核心数据类型——元祖、文件及其他
举报原因:
原因补充:

(最多只允许输入30个字)