python零基础学习-基础知识5-集合与文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python零基础学习-基础知识5-集合与文件相关的知识,希望对你有一定的参考价值。

集合: 一种特殊的列表

  • 集合中的数据不会重复
  • 可以测试两组数据的关系: 交集, 并集, 差集
  • 集合中的数据是无序的

1. 创建集合

#---------------------------方法1---------------------
list1=[1,2,3,4,5]
list2=set(list1)
print(list2)         #执行结果: {1, 2, 3, 4, 5}, 大括号是集合的标识
print(type(list2))   #执行结果: <class ‘set‘>

#--------------------------方法2-----------------------
list3=set([2, 4, 6, 8, 10])

 

2. 集合关系测试

1) 求交集

print(list2.intersection(list3))
print(list2&list3)
#执行结果: {2, 4}

2) 求并集并去重

print(list2.union(list3))
print(list2|list3)
#执行结果: {1, 2, 3, 4, 5, 6, 8, 10}

 3) 求差集: 1有, 2没有的

print(list2.difference(list3))
print(list2-list3)
#执行结果: {1, 3, 5}

4) 对称差集: 并集-交集

print(list2.symmetric_difference(list3))
print(list2^list3)
#执行结果: {{1, 3, 5, 6, 8, 10}

5) 关系判断

print(list2.issubset(list3), list2.issuperset(list3))
#判断list2是否为list3的子集; 判断list2是否为list3的父集
#执行结果: False False

print(list2.isdisjoint(list3))
#两集合没有交集则返回True, 否则返回False

3. 集合的变更

list2.add(100)                     #集合中添加一项
list2.update([101, 102, 103, 104]) #集合中同时添加多项
list2.remove(104)                  #集合中删除一项
list2.pop()                        #随意删除一项
list2.discard(103)                 #存在则删除, 不存在则忽略

Tip:

下面判断元素是否存在的方法, 适用于字典, 列表, 集合, 字符串

print(101 in list2)              #返回True或False

文件

1. 打开文件 并 读取文件内容

#方法1
data=open("file1",encoding="utf-8").read()
#如果不标注编码格式, 将会使用操作系统默认编码打开. windows默认编码格式为GBK
print(data)                       #打印文件全部内容

#方法2; 为避免不断调用open方法创建文件对象, 应尽量使用方法2
f=open("file1",encoding="utf-8")  #创建文件句柄
data=f.read()
print(data)                    #打印文件全部内容
data1=f.read()
print(data1)                   #打印空. 原因: 在读取data时, 文件的光标已经移动到文件底端
f.close()

 

2. 文件的读写模式

1) w: 写模式, 不能读文件

f=open("file2","w",encoding="utf-8")           #创建新文件file2; 如文件已存在, 会覆盖之前的
f.write("啦啦啦啦啦啦\n我是卖报的小行家\n")      #将内容写到新创建的文件中
f.close()

2) a: 追加模式, 不能读文件

f=open("file2","a",encoding="utf-8")           #打开已存在的file2文件
f.write("不到天明去卖报\n一边跑一边叫\n")        #将内容追加到文件末尾
f.close()

3) r: 只读模式, 只能读文件, 不能写入; 如不指定读写模式, 则默认为r

#将文件内容读取为一个列表, 每行为一个元素;该方法占用大量内存, 尽量不要使用
f=open("file1","r",encoding="utf-8")
print(f.readlines())
f.close()

#循环读取
f=open("file1","r",encoding="utf-8")
for i in range(5):
    print(f.readline())
f.close()

#效率最高的方法, 推荐使用
f=open("file1","r",encoding="utf-8")
for line in f:
    print(line)
f.close()

 

4) r+: 可以读文件, 可以以追加的方式进行写入

f=open("file2","r+",encoding="utf-8")
print(f.readline())                        #可以读文件
f.write("今天的新闻真正好\n")             
#从文件最后面开始写文件, 以追加的形式写入, 移动光标也没有用
f.close()

5) w+: 先创建一个新文件, 再写入

f=open("file1","w+",encoding="utf-8")
f.write("啦啦啦\n我是卖报的小行家\n不到天明去卖报")
f.seek(6)
f.write("123")      #会从光标所在的地方开始写入, 但会以insert的模式写入, 会覆盖后面的字符
f.close()

6) rb:

  • 以二进制格式读文件
  • 不能指定编码参数, 通常用于网络传输, 视频文件, 文件跨平台打开等功能

7) wb: 必须转化为二进制编码进行写入

3. 文件句柄位置

f=open("file1","r",encoding="utf-8")

print(f.tell())           #打印文件句柄位置, 初始位置为0
f.readline()
print(f.tell())          #句柄到达第二行, 此示例中返回值为17--->第一行字符的字符数

print(f.read(2))         #从句柄处开始, 读两个字符

f.seek(0)                #句柄返回文件开头

f.close()

4. 修改: 只有两种方式

  • 全部加载至内存, 修改完成后写进去
  • 读进来, 改一下, 存到新的文件里
f=open("file2","r",encoding="utf-8")
f_new=open("file3","w",encoding="utf-8")

for line in f:
    if "" in line:
        line=line.replace("","报纸")
    f_new.write(line)
f.close()
f_new.close()

 

5. 其他

print(f.encoding)         #打印文件编码
print(f.name)             #打印文件名
f.truncate()              #清空文件, 从头开始清空, 移动光标并没有用

# f.flush(): 强制将内存中的内容刷新到硬盘上, 常用于金额等敏感数据的写入
# 不强制刷新时, 系统会等内存存储一定数量数据时, 才往硬盘中写入

#模拟process bar
import sys, time
for i in range(20):
    sys.stdout.write(">")
    sys.stdout.flush()
    time.sleep(0.5)

 

6. with语句: 执行完毕后会自动关闭文件

with open("file2","r",encoding="utf-8") as f:
    print(f.readline())

with open("file2","r",encoding="utf-8") as f1,open("file3","r",encoding="utf-8") as f2:
    print(f1.readline())
    print(f2.readline())

 

以上是关于python零基础学习-基础知识5-集合与文件的主要内容,如果未能解决你的问题,请参考以下文章

Python零基础入门

Python零基础入门

Python零基础入门

python 零基础学习大纲 - 整理

零基础如何学好python?Python代码规范之命名规范

零基础学python需要注意哪些问题