Python-数据类型-文件操作

内容回顾:
-list:
-append():用于在列表末尾添加新的对象
aList = [123, 'xyz', 'zara', 'abc']
aList.append(2009)
print(aList)
-count():用于统计某个元素在列表中出现的次数
aList = [123, 'xyz', 'zara', 'abc', 123]
aList.count(123)
print(aList)
-extend():用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
aList = [123, 'xyz', 'zara', 'abc', 123]
bList = [2009, "你好"]
aList.extend(bList)
print(aList)
-index():用于从列表中找出某个值第一个匹配项的索引位置
aList = [123, 'xyz', 'zara', 'abc']
aList.index("xyz")
print(aList)
-insert():用于将指定对象插入列表的指定位置
aList = [123, 'xyz', 'zara', 'abc']
aList.insert(2, 993)
print(aList)
-pop():用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
aList = [123, 'xyz', 'zara', 'abc']
# aList.pop()
aList.pop(2)
print(aList
-remove():用于移除列表中某个值的第一个匹配项
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
print(aList)
aList.remove(123)
print(aList)
-reverse():函数用于反向列表中元素
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.reverse()
print(aList)
-sort():用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.sort()
print(aList)
tuple:
- len():计算元组元素个数
tuple1, tuple2 = (123, 'xyz', 'zara'), (456, 'abc')
len(tuple1)
len(tuple2)
深拷贝和浅拷贝:
  -深拷贝:拷贝所有
  -浅拷贝:只拷贝一层
今天内容:
1. 可变不可变
不可变:str,int,bool,tuple
可变: list,dict,set
2. 字典查找速度快,基于哈希索引
问题1. 字典的key都能是什么?
布尔值: true= 1; false=0
dict:
-values():字典(Dictionary) values() 函数以列表返回字典中的所有值
dic = {'Name': 'Zara', 'Age': 7}
dic.values()
print(dic)
-keys():字典(Dictionary) keys() 函数以列表返回一个字典所有的键
dic = {'Name': 'Zara', 'Age': 7}
dic.keys()
print(dic)
-items():以列表返回可遍历的(键, 值) 元组数组
dic = {'Name': 'Zara', 'Age': 7}
dic.items()
print(dic)
-get():返回指定键的值,如果值不在字典中返回默认值
dic = {'Name': 'Zara', 'Age': 27}
dic.get("Name")
dic.get("server")
print(dic)
-setdefault():和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值
dic = {'Name': 'Zara', 'Age': 27}
dic.setdefault("Name")
print(dic)
-fromkeys():用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
seq = ('name', 'age', 'sex')
dic = dic.fromkeys(seq)
print(dic)
-update():把字典dict2的键/值对更新到dict里
dic = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }
dict.update(dict2)
print(dic)
-pop():删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
site= {'name': '老男孩', 'alexa': 10000}
pop_obj=site.pop('name')
print(pop_obj)
-popitem():随机返回并删除字典中的一对键和值。如果字典已经为空,却调用了此方法,就报出KeyError异常
site= {'name': '老男孩', 'alexa': 10000}
pop_obj=site.popitem()
print(pop_obj)
set:  -语法:di = {"k1","k2"}
-1.
names = {'龙哥','海角','老狗','成绩','小江','小高'}
names.add('龙哥')
print(names)
-2.差集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = ['小高','海娇','小狗']
val = names.difference(boys) # names中存在,boys中不存在数据
print(val)
val = boys.difference(names) # boys中存在,names中不存在数据
print(val)

boys.difference_update(names) # boys中存在,names中不存在数据
print(boys)

names.difference_update(boys) # boys中存在,names中不存在数据
print(names)
-3.对称差集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
# {'龙哥','海角','老狗','成绩','小江'}
# {'海娇','小狗'}
# {'海娇','小狗','龙哥','海角','老狗','成绩','小江'}
val = names.symmetric_difference(boys)
print(val)
names.symmetric_difference_update(boys)
print(names)
-4.在集合中删除指定值
names = {'龙哥','海角','老狗','成绩','小江','小高'}
names.discard('龙哥')
print(names)
-5.求交集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.intersection(boys)
print(val)
names.intersection_update(boys)
print(names)
-6.并集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.union(boys)
print(val)
-7.判断是否无交集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'海娇','小狗'}
# 有交集:False
# 无交集:True
val = names.isdisjoint(boys)
print(val)
-8.子集父集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'龙哥','老狗'}
# 是否是子集
val = boys.issubset(names)
print(val)
# 是否是父集
val = names.issuperset(boys)
print(val)
-9.删除集合元素
names = {'龙哥','海角','老狗','成绩','小江','小高'}
v = names.pop()
print(v)
names.remove('老狗')
print(names)
names.discard('老狗1')
print(names)
-10.更新
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = ['龙哥1','老狗1']
names.update(boys)
print(names)
 -11.集合
- 元素,不可变
文件操作:

-操作文件三要素:
-1. 路径:D:\文件名称.txt
-2. 编码:utf-8
-3.模式:
    
  - r:以读方式打开,不能进行写操作,文件必须是已经存在的
      - r+:以读写方式打开,文件必须是已经存在的
      - w:以写方式打开,不能进行读操作,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
      - w+:以读写方式打开,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
      - a:以追加方式打开,不能进行读操作,把数据追加到文件的末尾;若不存在,则创建文件
      - a+:以读写方式打开,把数据追加到文件的末尾;若不存在,则创建文件
-功能:
      -obj.read():是最简单的一种方法,一次性读取文件的所有内容放在一个大字符串中,即存在内存中
     -obj.write():把str写到文件中,write()并不会在str后加上一个换行符
    -obj.seek():将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence
参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
    -obj.tell():返回文件操作标记的当前位置,以文件的开头为原点
    -obj.close():关闭文件。python会在一个文件不用后自动关闭文件
    -obj.flush():把缓冲区的内容写入硬盘
obj = open('美女.txt',mode='r+',encoding='utf-8')
data = obj.read(1) #
情况一:
obj.write('6') # 在最后继续写
情况二:
obj.seek(1)
obj.write('6') # 定位到指定位置
obj.close()
print(data)
-读取utf-8编码数据,【转换】成unicode(str)编码的数据
obj = open('D:\美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r')
content = obj.read()
obj.close()
print(content,type(content))

obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb')
content = obj.read()
obj.close()
print(content,type(content)
-1. 文件在硬盘上时,一定是某种编码:utf-8,gbk......
-2. rb, bytes, rb
-3. r, 转换encoding= utf-8 r encoding:utf-8
-读文件
obj = open('D:\\n美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r')
content = obj.read() # 字符串类型
obj.close()
print(content,type(content))
-只读:
- open(文件路径, mode='rb')
- open(文件路径, mode='r', encoding='utf-8')
obj = open('D:\美女模特空姐护士联系方式.txt', encoding='utf-8', mode='r')
content = obj.read()
obj.close()
print(content)

obj = open('D:\美女模特空姐护士联系方式.txt', mode='rb')
content = obj.read()
obj.close()
print(content)
-只写:
- open(文件路径, mode='wb')
- open(文件路径, mode='w', encoding='utf-8')
-示例:
obj = open('美女.txt',mode='w',encoding='utf-8')
obj.write("海角-贾敏")
obj.close()
obj = open('美女.txt',mode='wb')
obj.write("海角-贾敏22222".encode('utf-8'))
obj.close()
-只追加:
- open(文件路径, mode='ab')
- open(文件路径, mode='a', encoding='utf-8')
obj = open('美女.txt',mode='a',encoding='utf-8')
obj.write("小红")
obj.close()
obj = open('美女.txt',mode='ab')
obj.write("龙哥".encode('utf-8'))
obj.close()
obj = open('美女.txt', mode='r+', encoding='utf-8')
data = obj.read()  # 读取所有文件内容
data = obj.read(2) # r,字符;rb,字节
obj.write('字节或字符串')
obj.seek(2)         # 永远是字节,指定指针位置
obj.tell()          # 读取当前指针的位置
#是否可写
obj.writable()
#是否可读
obj.readable()
#将内存中内容刷到硬盘
obj.flush()
obj.tell()
data = obj.readline()
print(data)
data = obj.readline()
print(data)
#截取文件内容,根据指针位置,只保留指针之前数据
obj.truncate()
for line in obj:
    print(line)
obj.close()

 

posted @ 2017-08-24 20:35  程先生_Python  阅读(165)  评论(0)    收藏  举报