Day3------集合、列表补充、文件

目录

一、集合

set {数据,数据,...}

集合中的类型是不可变类型

集合是可变类型

集合是无序的 不支持下标

集合的数据不重复

二、列表补充

1、列表排序中的key

2、列表推导式

三、文件

1、基础知识

 2、文件的三种方式

 3、文件的读操作

 4、去除空白字符

5、读取大文件

6、存储概念

7、 文件分类

8、文件备份

四、文件相关训练

1、文件操作

2、文件 


一、集合

set {数据,数据,...}

集合中的类型是不可变类型

集合是可变类型

集合是无序的 不支持下标

集合的数据不重复

my_set={1,2.3,4.56,'hell0',(34,547,)}
print(my_set)

# remove()
my_set.remove(1)
print(my_set)
# pop()
a=my_set.pop()
print(a)
print(my_set)
# add()
my_set.add(45)
print(my_set)
# clear()
my_set.clear()
print(my_set)

# 去重
my_list=[1,2,564,76,7,7,84,1]
print(my_list)
my_list=list(set(my_list))
print(my_list)

二、列表补充

1、列表排序中的key

# 数据类型保持一致
my_list=[1,3,5,7,9,45]
my_list.sort()
print(my_list)

list1=[{'name':'d','age':19},
       {'name':'b.txt','age':16},
       {'name':'a','age':16},
       {'name':'c','age':20}]
# 列表中的数据为字典时,需指定排序规则
list1.sort(key=lambda x:x['name'])
print(list1)
list1.sort(key=lambda x:x['age'])
print(list1)
list1.sort(key=lambda x:(x['age'],x['name']))
print(list1)


list2=['a','b.txt','sfa','defgf','fhdk']
list2.sort()
print(list2)
list2.sort(key=lambda x:len(x))
print(list2)

2、列表推导式

# 快速生成列表、字典

# 1.txt、变量=[生成数据的规则 for 临时变量 in xxx]
my_list1=[i for i in range(5)]
my_list2=['hello' for i in range(5)]
my_list3=[f'num:{i}' for i in range(5)]
print(my_list1)
print(my_list2)
print(my_list3)

# 2、变量=[生成数据的规则 for 临时变量 in xxx if xxx]
# if 成立才生成
my_list4=[f'num:{i}' for i in range(9) if i%2==0]
print(my_list4)

# 3、变量=[生成数据的规则 for 临时变量 in xxx for j in xxx]
# 第二个for循环循环一次,生成一个数据
my_list5=[f'num:{i,j}' for i in range(3) for j in range(3)]
print(my_list5)


# 字典推导式
# 变量={生成字典的规则 for 临时变量 in xxx]
my_dict={f'name{i}':i for i in range(3)}
print(my_dict)

my_dict={f'name{i}{j}':j for i in range(3) for j in range(3)}
print(my_dict)

三、文件

1、基础知识

文件作用:
    永久保持数据
    文件在硬盘存储的格式是二进制
操作:打开-->读取-->操作

1.txt、 打开 将文件从硬盘中存到内存
open(file,moder='r',encoding='')
file:文件名
moder:文件打开方式 r()read w(write) a(append)追加
encoding:编码方式 utf-8 gbk
2、 读写
read()
3、 关闭
close() 将内存中三大文件同步到硬盘

open函数打开文件,未指定编码方式时,windows默认gbk
write函数写入,使用gbk

 2、文件的三种方式

# r方式 文件不存在时,报错;
f=open('a.txt','r',encoding='utf-8')
buf=f.read()
print(buf)
f.close()

# w方式 文件不存在时,自动创建;文件存在会覆盖清空源文件
f=open('a.txt','w',encoding='utf-8')
f.write('hello world\n')
f.write('hello python\n')
f.write('你好')
f.close()

# a方式 文件末尾写入内容 文件不存在时,自动创建
f=open('a.txt','a',encoding='utf-8')
f.write('她她她\n')
f.write('他他他\n')
f.close()

 3、文件的读操作

文件的读操作
buf=f.read(3) # 读三个字符
buf=f.read(3) # 再次读取时,如果有第二行,也会读取换行符\n
文件的读操作--按行读取
buf=f.readline() #读取一行 读取一次后,下次读取新内容
buf=f.readlines() #读取所有行 返回值为列表,一项为一个字符串

 4、去除空白字符

f=open('a.txt','r',encoding='utf-8')
buf=f.readlines()
print(buf)
# 去除空白字符  列表推导
buf=[i.strip() for i in buf]
print(buf)
f.close()

5、读取大文件

# 有多行
f=open('a.txt','r',encoding='utf-8')
while True:
    buf=f.readline()
    if buf:
        print(buf,end='')
    else:
        # 文件读完
        break
f.close()

# 没有多行
f=open('b.txt', 'r', encoding='utf-8')
while True:
    buf=f.read(5)
    if buf:
        print(buf,end='')
    else:
        # 文件读完
        break
f.close()

6、存储概念

计算机中的大小
进制:二进制
     八进制
     十进制
     十六进制
最小单位:bit(位)  
字节:基本存储单位  byte 1byte=8 bit
1KB=1024 byte
1MB=1024KB
1GB=1024MB
1TB=1024GB

100Mbit 12.5MB/s
200Mbit 25MB/s

7、 文件分类

文本文件 txt  py  能使用记事本打开的文件
文本文件可以使用文本、二进制文件打开
二进制文件只是使用二进制方式打开  rb vb ab
二进制文件 mp3 mp4 rmvb 等 

f=open('c.txt','wb')
f.write('你好'.encode()) # 字符串转换为二进制
f.close()

f=open('c.txt','rb')
buf=f.read()
print(buf)
print(buf.decode())
f.close()

8、文件备份

1、用只读方式打开文件
2、读取
3、关闭
4、只写方式打开新文件
5、将第二部内容写入新文件
6、关闭新文件

file_name=input('请输入要备份的文件名')

f=open('file_name','rb')
buf=f.read()
f.close()

index=file_name.rfind('.')
new_filename=file_name[:index]+'[备份]'+file_name[index:]
f_w=open('new_filename','wb')
f_w.write(buf) # 字符串转换为二进制
f.close()

9、文件相关操作

import os

# 文件重命名
os.rename(源文件路径名,新文件路径名)

# 删除文件
os.remove(文件路径名)

# 创建文件夹
os.mkdir(目录路径名)

# 获取当前目录
os.getcwd()

# 改变默认目录
os.chdir('../')

# 获取目录列表
os.listdir('./')

# 删除文件夹
os.rmdir(目录名)
'''


'''
import os

# 批量创建文件名
def create_files():
    os.chdir('test')
    for i in range(8):
        file_name='file_'+str(i)+'.txt'
        f=open(file_name,'w')
        f.close()
    os.chdir('../')

# 批量修改文件名
def modify_filename():
    os.chdir('test')
    buf_list=os.listdir()
    for file in buf_list:
        new_file='ly'+file
        os.rename(file,new_file)
    os.chdir('../')

# 批量删除文件名局部
def re_filename():
    os.chdir('test')
    buf_list=os.listdir()
    for file in buf_list:
        num=len('ly')
        new_file=file[num:]
        os.rename(file,new_file)
    os.chdir('../')
re_filename()
'''

四、文件相关训练

1、文件操作

题目1 [加强训练]

题干

使用文件操作,向movie.txt文件中写入一下内容:

功夫,周星驰
一出好戏,黄渤
我不是药神,徐峥

训练目标

  • 文件的写操作

训练提示

  • 如何往一个文件里面写入数据

  • 写入的数据换行使用什么方法

参考方案

  • 打开文件open(),打开方式为"w"

  • 写入文件write()

  • 换行使用"\\n"

  • 也可以使用""" """三个引号的形式,可以直接在代码里书写换行

操作步骤

  • 打开文件,创建对象

  • 写入信息

  • 关闭文件

参考答案

  • 第一种方式

# 因为编码格式的问题,我们为了防止出现乱码,需要在这里设置encoding="utf8"
f = open("movie.txt","w", encoding="utf8")
f.write("功夫,周星驰\\n一出好戏,黄渤\\n我不是药神,徐峥")
f.close()
  • 第二种方式

f = open("movie.txt","w",encoding="utf8")
f.write("""功夫,周星驰
一出好戏,黄渤
我不是药神,徐峥""")
f.close()

题目2 [加强训练]

题干

将第一题创建好的文件打开,并读取内容, 要求如下:

  • 一次全部读取

  • 每次读取一行

训练目标

  • 文件的读操作

训练提示

  • 如何读取文件内容?

  • 读取全部内容的方法?

  • 每次读取一行的方法?

参考方案

  • 打开文件open,打开方式为“r”

  • 读取文件read()

  • 读取一行readline()

  • 读取所有行readlines()

操作步骤

  • 打开文件(使用r方式打开,如果不写那么默认是只读方式打开)

  • 读取信息

  • 关闭文件(每次操作完文件后要关闭文件)

参考答案

  • 第一种方式

    # 注意编码格式问题
    f = open("movie.txt",'r',encoding="utf8")
    content = f.read()
    f.close()
    print(content)
    
  • 第二种方式

    f = open("movie.txt",'r',encoding="utf8")
    content = f.readlines()
    f.close()
    # 读取后的内容是一个列表,注意列表中的数据中有一个"\\n"。如果使用需要处理
    print(content)
    
  • 第三种方式

    f = open("movie.txt",'r',encoding="utf8")
    # 因为readline 每次读取一行,需要我们使用循环读取
    while True:
        content = f.readline()
        # 当我们读取的内容是空字符的时候跳出循环
        if content == "":  # if content:
            break
        print(content)
    f.close()
    

题目3 [加强训练]

题干

  • 使用os模块创建一个名为“黑马”的文件夹

  • 获取黑马文件夹当前所在目录

  • 获取当前的目录列表

  • 改变文件的操作路径

  • 将黑马文件夹删除

训练目标

  • os模块的使用

训练提示

os模块基础命令的使用

参考方案

创建文件mkdir

当前所在目录getcwd

当前的目录列表listdir

改变文件的操作路径chdir

删除文件夹rmdir

操作步骤

参考答案

import os

# 01
os.mkdir("黑马")
# 02
os.getcwd()
# 03
os.listdir("../../../../../Desktop/")
# 04
os.chdir("../../../../../")
# 05
os.rmdir("黑马")

题目4 [综合训练1]

题干

编写一段代码以完成两份文件之间的相互备份

  • 提示用户输入文件名。例:gailun.txt

  • 创建以用户输入的名字的文件

  • 打开文件写入如下信息

    ​ 功夫,周星驰

    ​ 一出好戏,黄渤

    ​ 我不是药神,徐峥

  • 将输入的数据输出到终端上

  • 在文件夹中创建gailun副本.txt文件

  • 将gailun.txt文件中的数据写入gailun副本.txt文件中

  • 打开文件,查看文件中内容

训练目标

  • 文件的综合使用

训练提示

  • 每次操作完文件需要关闭

  • 在windows系统中注意编码格式问题

  • 需要自己重新定义一个新的文件名

参考方案

操作步骤

  • 操作步骤一

    • 提示用户输入文件名

    • 打开文件

    • 写入信息

    • 关闭文件

    • 打开文件

    • 读取文件中的信息

  • 操作步骤二

    • 提取文件名的后缀

    • 组建新的文件名

  • 操作步骤三

    • 打开新组建的文件名字的文件

    • 写入文步骤一中读取到的信息写入到新的文件中

    • 关闭文件

  • 操作步骤四

    • 打开新的文件

    • 读取文件中的内容

    • 关闭文件

参考答案

# 提示输入文件
oldFileName = input("请输入要创建的文件名:")
# 以写的方式打开文件
oldFile = open(oldFileName, 'w', encoding="utf8")
oldFile.write("功夫,周星驰\\n一出好戏,黄渤\\n我不是药神,徐峥")
oldFile.close()
# 打开文件
f = open(oldFileName, 'r', encoding="utf8")
#读取文件内容
context = f.readlines()
print(context)
f.close()

# 提取文件名的后缀
fileFlagNum = oldFileName.rfind('.')
# 确定文件名中有没有后缀, rfind() 找到内容返回正数下标,没有找到,返回-1
if fileFlagNum > 0:
    fileFlag = oldFileName[fileFlagNum:]

# 组织新的文件名字
newFileName = oldFileName[:fileFlagNum] + '复本' + fileFlag

# 创建新的文件副本
newFile = open(newFileName, 'w',encoding="utf8")
for lineContent in context:
    print(lineContent)
    newFile.write(lineContent)
newFile.close()

# 打开写入的新文件
f = open(newFileName, "r", encoding="utf8")
# 读取内容
context = f.read()
# 输入到终端
print(context)
# 关闭文件
f.close()

题目5 [综合训练2]

题干

  • 创建一个新项目中新创建一个名字py文件夹

  • 进入py文件夹中创建5个文件,文件名分别为python基础班-1.txt,python基础班-2.txt,python基础班-3.txt,python基础班-4.txt,python基础班-5.txt

  • 然后将py文件夹中的所有文件都改名为[黑马]python基础班-1.txt,[黑马]python基础班-2.txt,[黑马]python基础班-3.txt,[黑马]python基础班-4.txt,[黑马]python基础班-5.txt

训练目标

  • os模块的综合使用

训练提示

  • 首先创建文件夹,创建文件

  • 然后,获取当前文件夹下所有文件

  • 最后进行重命名

参考方案

  • 创建文件夹mkdir

  • 进入文件夹中chdir

  • 获取文件夹中所有的文件listdir

  • 重命名rename

操作步骤

  • 第一部分

    • 创建文件夹

    • 进入文件夹中

    • 循环遍历创建五个文件,每创建一个后关闭文件

  • 第二部分

    • 获取文件夹中所有的文件

    • 遍历获取后的文件,并修改文件名称

参考答案

# 第一部分
import os
# 创建文件夹
os.mkdir("py")
# 进入py文件夹中
os.chdir("py")
# 创建5个文件
for i in range(1, 6):
    f = open("python基础班-%d.txt" % i, "w")
    f.close()

# 第二部分
# 进入py文件夹中,由于上边代码中已经进入到“py”文件夹里面,这里就不用再次进入了
# os.chdir("py") 
# 获取py文件夹中所有的文件
filename_list = os.listdir()
# 遍历文件
for file_name in filename_list:
    # 进行修改
    new_file_name = "[黑马]" + file_name
    os.rename(file_name, new_file_name)

2、文件 

题目[加强训练]

题干

使用递归求 1-100 累加和

训练目标

  1. 递归的使用

训练提示

  1. 递归的特点是什么?

  2. 如何求一个数的累加和?

参考方案

  1. 递归函数的特点:①函数自己调用自己 ②函数有结束条件

  2. 求 num 的累加和,只需要让 num-1 的累加和加上 num 即可。

操作步骤

  1. 书写结束条件

  2. 书写递归调用

参考答案

def sum_num(num):
    # 如果是1, 直接返回1
    if num == 1:
        return 1
    # 如果不是1, 重复执行累加
    return num + sum_num(num - 1)


result = sum_num(100)
print(result)

题目[加强训练]

题干

编程实现向文件a.txt中书写好好学习,天天向上的内容。

训练目标

  1. 文件操作练习

训练提示

  1. python 中如何操作文件?

  2. 如何向文件中书写内容?

参考方案

  1. 打开文件使用 open 函数

  2. 向文中书写内容使用 write 函数

  3. 关闭文件用 close 函数

操作步骤

  1. 打开文件

  2. 向文件中写入内容

  3. 关闭文件

参考答案

# 1. 打开文件
f = open("test/a.txt", 'w', encoding="utf-8")

# 2. 向文件中写入内容
f.write("好好学习,天天向上")

# 3. 关闭文件
f.close()

猜你喜欢

转载自blog.csdn.net/m0_46493223/article/details/126090500