Python基础八(集合、文件操作)

一、集合

集合特性:

1、集合是无序、且不重复的

2、集合里面的元素必须是可哈希的(即不可变的数据类型int、str、tuple),但是集合本身是不可哈希的

3、集合里面的元素不能更改

4、集合可以求交集、并集、反交集、差集

去重:

1, 用算法去做.

2, 转换成集合.在转换过来.

一、集合的创建

set1 = set({1,2,'alex'})

set1 = {'alex','wusir','ritian','egon','barry'}

二、集合增

set1 = {'alex','wusir','ritian','egon','barry'}

add 添加一个元素
set1.add('景女神')
print(set1)

#update 迭代着添加
set1.update('abc')
set1.update([1,2,3])
print(set1)-----{1, 2, 3, 'b', 'ritian', 'c', 'barry', 'alex', 'a', 'egon', 'wusir'}

  

三、集合删

按照元素去删除
set1.remove('ritian')
print(set1)
随机删除 pop
set1.pop()
print(set1)
清空集合 clear()
set1.clear()
print(set1)---set()
删除 集合
del set1
print(set1)---报错

  

四、集合查

查:----使用for循环
for i in set1:
    print(i)

  

二、集合的其他操作

2、1交集   ( &、  intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set3 = set1 & set2
print(set3)
print(set1.intersection(set2))
输出{4,5}

  

2、 2 并集 ( |  、 union )

print(set1 | set2)
print(set1.union(set2))
输出{1, 2, 3, 4, 5, 6, 7, 8}

  

2、 3  反交集 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

  

2 、4   差集  (— 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

  

2、5    超集、子集

子集  <     issubset

超集  >   issuperset

set1 = {1,2,3}
set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
返回Ture
print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
返回Ture

  

2、 6   frozenset 

不可变集合,让集合变成不可变类型

s2 = frozenset(set1)
print(s2,type(s2))
输出 frozenset({1, 2, 3}) <class 'frozenset'>

  

三、文件操作

3、1 文件操作基本流程

f = open('C:\\Users\\Administrator\\Desktop\\new.txt',encoding='utf-8',mode='r')
#open 他是windows系统的命令
#r:只读
# f 变量:f f_obj,obj,file_hl file_hanlder 文件句柄
#通过对文件句柄的操作,来得到你想要的东西.
content = f.read()
print(content)
#f.close 将你这文件句柄,或者是动作关闭,节省内存
f.close()

  

3、2  读

C:\\Users\\Administrator\\Desktop\\new.txt 绝对路径
相对路径:同一个文件夹下的文件就是相对路径
r
rb一般用在非文字类型的文件:图片,视频
文件的下载和上传的功能用b模式
f = open('log','r',encoding='utf-8')
content = f.read()
print(content,type(content))
f.close()
----相对路径

四、文件的打开模式

文件句柄 f  = open(‘文件路径’,‘模式’)

#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

#2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb 
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

#3,‘+’模式(就是增加了一个功能)
r+, 读写【可读,可写】
w+,写读【可写,可读】
a+, 写读【可写,可读】

#4,以bytes类型操作的读写,写读,写读模式
r+b, 读写【可读,可写】
w+b,写读【可写,可读】
a+b, 写读【可写,可读】
View Code

只读的 5种模式

1、f.read()全部读出来

2、f.read(n)---n(代表只读取前n个)

f = open('log',mode='r',encoding='utf-8')
content = f.read(3) # r 模式:n 是按照字符读取
print(content)
f.close()

f = open('log',mode='rb')
content = f.read(5) # rb 模式:n 是按照字节读取
print(content)
f.close()
# bytes ---> str
s = b'\xe4\xb8\xb0\xe5\x8e'.decode('utf-8')
print(s)

  

3、f.readline() 按行读

f = open('log',encoding='utf-8')
line = f.readline()
print(line)
line1 = f.readline()
print(line1)
f.close()

  

4、f.readlines() 每一行作为一个元素,放在列表中

f = open('log',encoding='utf-8')
lines = f.readlines()
print(lines)
f.close()

  

5、推荐方式  循环读取  for 循环

f = open('log',encoding='utf-8')
for i in f:
    print(i)
f.close()

  

 写  w

如果没有文件,则创建文件写内容,如果有文件则将原文件内容全部删除再写

 

f = open('log','w',encoding='utf-8')
f.write('Alex是sb')
f.close()
f = open('log1','w',encoding='utf-8')
f.write('Alex依然是sb')
f.close()

  

追加 a    ab

追加在后面

f = open('log','a',encoding='utf-8')
f.write('wusir紧跟其后')
f.close()

r +    读 写

r+     r+b
f = open('log','r+',encoding='utf-8')
print(f.read())
f.write('fdsaf')
f.close()

w +   写读          w+b

f = open('log','w+',encoding='utf-8')
f.write('aaaa')
f.seek(0)  #移动光标
print(f.read())
f.close()

a +   追加可读

f = open('log','a+',encoding='utf-8')
f.write('aaaa')
f.tell()
print(f.tell())
f.seek(2)
# print(f.readable())
# print(f.read())
f.close()

  

f = open('log',encoding='utf-8')
f.seek(3)  #按照字节调整
print(f.read())
f.close()

  

f = open('log','a',encoding='utf-8')
f.truncate(3)  #截取 截取前面的内容
f.close()

常用方法

read   readline     readlines    for循环   seek   tell    write    writeable

 

 

ps:with open()----as     -----不用close()用同一个with可以操作多个文件句柄

with open('log','r',encoding='utf-8') as f1,\
        open('log1','r',encoding='utf-8') as f2:
    print(f1.read())
    print(f2.read())

  

四、文件改动

过程:

1、创建一个新文件

2、读取文件

3、将原文件的内容通过你想要的方式进行更改,并写入新文件.

4、将原文件删除

5、将新文件重命名为原文件名

#1,创建一个新文件.
#2,读取原文件.
import os
with open('log',encoding='utf-8') as f1,\
    open('log.bak','w',encoding='utf-8') as f2:
# 3,将原文件的内容通过你想要的方式进行更改,并写入新文件.
    old_content = f1.read()
    new_content = old_content.replace('alex','SB')
    f2.write(new_content)
#4,将原文件删除.
os.remove('log')
#5,将新文件重命名原文件名.
os.rename('log.bak','log')
import os
with open('log',encoding='utf-8') as f1,\
    open('log.bak','w',encoding='utf-8') as f2:
    # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件件.
    for i in f1:
        i = i.replace('alex','SB')
        f2.write(i)
#4,将原文件删除.
os.remove('log')
#5,将新文件重命名原文件名.
os.rename('log.bak','log')

  

posted @ 2018-01-30 19:00  GuoXY  阅读(100)  评论(0编辑  收藏  举报