Python自动化开发学习2-2

集合

创建集合可以用set(),或者直接用{}

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
print(set_a)
print(set_b)
print(type(set_a),type(set_b))

集合同样也有各种操作,就记几个符号的。别的到用的时候再去查吧

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
print(set_a | set_b)  # 并集
print(set_a & set_b)  # 交集
print(set_a ^ set_b)  # 对称差集
print(set_a - set_b)  # 差集
print(set_b - set_a)  # 还是差集

并没有"+"号,并集已经有"|"号可以获得了。

集合删除的3中方法:

set_a = set([1,2,3,4,5])
set_b = {1,3,5,7,9}
c = set_a.pop()  # 随机删除一个,返回值为删除的元素
print(c,set_a)
set_b.remove(3)  # 指定删除一个元素
print(set_b)
set_b.discard(7)  # 也是指定删除一个元素
print(set_b)
set_b.discard(2)  # discard允许尝试删除不存在的元素,但是remove会报错
#setb.discard(2)
print(set_b)

文件的操作

open()打开文件。windows系统默认的是gbk编码,如果不指定字符编码,就会使用系统默认的字符编码打开文件。比如这时python就会使用gbk编码去读utf-8文件,运行后会报错或者读到乱码。

现在推荐我们的方法是全部文件都使用utf-8的编码格式。open的时候就不要省略这个参数了,直接指定utf-8的字符编码。

文件的基本操作:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打开文件,这里指定了utf-8
data = file.read()  # 读取文件的全部内容
print(data)  # 打印读取的内容
file.close()  # 关闭文件

读取文件内容逐行打印:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打开文件,这里指定了utf-8
for line in file:
    print(line.rstrip())  # 加了rstrip可以去掉每一行右边的空格(包括换行符)
file.close()

推荐上面的方法实现。这个方法是一次读一行,让后操作,然后再处理下一行。这是一个高效的方法。

如果是使用一次读取整个文件到内存,然后再进行处理的实现方法(比如readlines()),在处理大文件的时候效率会低很多。虽然那也得文件足够大(大到现在内存容量的级别几个G)。

不过这个方法处理的时候数据就不是列表了,要获取行号,只能在for循环开始的时候加一个计数器,然后每一次都自增1,这样来记录行号

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打开文件,这里指定了utf-8
count = 0
for line in file:
    count += 1
    print(count,line.rstrip())  # 加了rstrip可以去掉每一行右边的空格(包括换行符)
file.close()

flush():强制刷新。默认写文件的时候,是先写入缓存,等缓存到一定数量后再一次全部写入硬盘。如果对数据的实时性要求高的话,又不想关闭文件的话,就需要这个方法来手动强制执行一次写如到硬盘的操作。

file = open(‘test.txt‘,‘a‘,encoding=‘utf-8‘)  # 打开文件,追加模式
file.write("先回将我存入缓存\n")
input("去打开文件看看文件有没有更新")
file.flush()
print("现在再打开文件看看有没有更新")
input("文件关闭前也会写入,我没再试一次")
file.write("再来一次,先回将我存入缓存\n")
input("打开文件看看文件有没有更新")
print("现在再打开文件看看有没有更新")
file.close()

验证了硬盘中的文件不是实时更新的。但是在flush()或者是close()之后,再去确认文件的时候都是最新的内容了。

文件的修改

文件的修改比较麻烦,没有办法做直接的修改。想要实现,只能重新全部写一遍。

方法一:一次读取文件的全部内容,然后修改后,再写回去。不适合大文件

file = open(‘test.txt‘,encoding=‘utf-8‘)
lines = file.readlines()  # 读取源文件
file.close()
file_w = open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘)  # 重新打开一个文件,这里方便比较,使用了新的文件名
#file_w = open(‘test.txt‘,‘w‘,encoding=‘utf-8‘)  # 使用原来的文件名直接打开写入就实现了文件的修改
for count,line_w in enumerate(lines):
    if count+1 == 3:
        line_w = "这是被替换的第三行\n"  # 这里修改替换掉第三行的内容,别忘了\n换行
    file_w.write(line_w)  # 将内容朱行写入到新文件
file_w.close()

方法二:也可以采取读一行,写一行的方式。避免一次读取过多的内容,更适合使用在大文件的场景。推荐:

file = open(‘test.txt‘,encoding=‘utf-8‘)  # 打开源文件
file_w = open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘)  # 新建一个临时的新文件
count = 0  # 这种情况只能用计数器来计算行数了
for line in file:
    count += 1
    if count == 3:
        line = ‘这是被替换的第三行\n‘  # 这里修改替换掉第三行的内容,别忘了\n换行
    file_w.write(line)  # 将内容朱行写入到新文件
file.close()
file_w.close()

并没有完成文件的修改,到此只是将源文件修改后生成了一个新文件。还需要将源文件删除,然后将新文件改名。对文件的操作(非文件内容),还需要调用os模块,不过并不难。而且也不是这节课的重点,就略过了。

文件关闭的问题

文件用完后,可以用close()将文件关闭,释放文件句柄。如果不关,问题也不大(不过肯定不是好习惯)。另外,程序运行完之后,所有打开的文件都会被关闭。

总之,打开文件,如果不操作了,就应该关闭它。

使用with来了打开文件,可以自动关闭文件(通过缩进,在代码块执行完毕后,自动关闭文件)。所以条件允许的情况下,尽量用with来打开文件。将上面2段用with来改写一下

# 注意一下缩进,通过这个判断文件是否操作完毕,从而自动关闭
with open(‘test.txt‘,encoding=‘utf-8‘) as file:
    lines = file.readlines()  # 读取源文件
with open(‘test.txt‘,‘w‘,encoding=‘utf-8‘) as file_w:
    for count,line_w in enumerate(lines):
        if count+1 == 3:
            line_w = "这是被替换的第三行\n"  # 这里修改替换掉第三行的内容,别忘了\n换行
        file_w.write(line_w)  # 将内容朱行写入到新文件
# 可以同时对多个文件的上下文进行管理
# 另外,一行代码不建议超过80个字符,这里超了,所以用了\来分行
# 并且换行后可以对齐open,清晰的显示了打开的文件数量
with open(‘test.txt‘,encoding=‘utf-8‘) as file,     open(‘test2.txt‘,‘w‘,encoding=‘utf-8‘) as file_w:
    count = 0  # 这种情况只能用计数器来计算行数了
    for line in file:
        count += 1
        if count == 3:
            line = ‘这是被替换的第三行\n‘  # 这里修改替换掉第三行的内容,别忘了\n换行
        file_w.write(line)  # 将内容朱行写入到新文件

作业

购物车程序:

1、启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表

2、允许用户根据商品编号购买商品

3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒

4、可随时退出,退出时,打印已购买商品和余额

5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示

6、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买

7、允许查询之前的消费记录

上面是买家的模块,另外再做一个卖家的模块。账号登录后可以维护商品列表,新增、修改商品和价格。

时间: 2024-08-29 18:53:24

Python自动化开发学习2-2的相关文章

Python自动化开发学习12-MariaDB

关系型数据库 主流的关系型数据库大概有下面这些: Oracle : 甲骨文公司的企业级的数据库 SQL Server : 微软的 MySQL : 免费的数据库,现在也属于Oracle的旗下产品 MariaDB : 开源的数据库,MySQL的一个分支 PostgreSQL : 也是开源的 SQLite : 一款轻量级的数据库 DB2 : IBM的 RDBMS 术语 RDBMS(Relational Database Management System)即关系数据库管理系统,在开始之前,先了解下RD

Python自动化开发学习19-Django

接下来,我们把Django分为视图(View).路由系统(URL).ORM(Model).模板(Templates )这4块进行学习. 视图 提交数据 上节课已经用过 request.POST.get() 获取提交的数据了,现在来看看有多选框的情况,多选的话应该要提交多个数据.先写一个有单选.多选.下拉列表的html: <body> <form action="/choice/" method="post"> <p> 性别: &l

python自动化开发学习-9 socket网络编程

一. 简介 python提供了两个级别访问的网络服务: 低级别的网络服务支持节本的socket,它提供了标准的BSD sockets API,可以访问底层操作系统socket接口的全部方法. 高级别的网络服务模块socketserver,它提供了服务器中心类,可以简化网络服务器的开发. socket介绍 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix

Python自动化开发学习4-3

JSON 和 pickle 序列化:把数据对象变成字符串的形式,这样可以保存在文件中.反之就是反序列化 python自带的str()可以完成序列化,然后eval()可以反序列化,但是我们先把他们忘记.不知道适用范围是多大. 我们用json的规范来做序列化和反序列化. import json dica = {'name':'Alice',         'age':18,         'from':'ShangHai'         } stra = json.dumps(dica)  #

Python自动化开发学习5

模块 在模块中,我们可以定义变量.函数,还有类(这个还没学到).总之应该就是所有的代码.先建一个文件,取名为module,py,内容如下: # 一下是module.py的内容 string = "This is module,py" def say_hi():     print("Hi") def test():     return "test in module.py" 在上面的模块中我们定义了1个变量和2个函数,现在我们要在另外一个文件中

Python自动化开发学习14

Web的三个层次 网页设计思路是把网页分成三个层次,即:结构层(HTML).表示层(CSS).行为层(Javascript).形象的比喻,先是HTML捏了一个人,然后CSS则是给人穿上衣服,最后通过JS让人动起来. Web服务的本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端.用户向服务器发送一个请求.然后服务器响应,将数据和格式发回给客户端,然后断开这个连接.客户端收到返回的数据后,通过浏览器将数据按照一定的格式呈现出来.整个过程就是

Python自动化开发学习15-JavaScript和DOM

初识JavaScript JavaScript(后面都简写为js)是一门独立的语言.浏览器本身就具有js解释器. js的存在形式 和css类似,js代码要放在<script>标签中.同样和css类似,还可以写在一个js文件中,比如文件名就叫 commons.js ,然后在head中引入 <script src="commons.js"></script> ,src的值就是js的文件路径.<script type="text/javas

Python自动化开发学习16-前端内容综合进阶

css补充 这里再补充几个css的知识点,下面会用到 最小宽度-min-width 设置元素的最小宽度.举例说明,比如设置一个百分比的宽度,那么元素的宽度的像素值是会随着页面大小而变化的.如果设置一个最小的像素宽度,那么当变化到最小值之后,不会继续变小.在下面的例子中,会出现滚动条,保证元素的宽度: <body> <div style="height: 80px;width: 100%;background-color: blue;min-width: 800px;"

Python自动化开发学习17

jQuery学习之前 jQuery 是 JavaScript 的一个类库,类似 python 中的模块.jQuery在线手册:http://jquery.cuishifeng.cn/官网:http://jquery.com/ 版本选择 目前jQuery有三个大版本:1.x. 2.x. 3.x.教学推荐使用1.x的最新版本,这个版本兼容IE低版本.去官方页面:http://code.jquery.com/ ,可以获取到最新的版本,我这会用的是 jquery-1.12.4 . 添加jQuery 前面

Python自动化开发学习18-Django基础篇

自定义Web框架 跟着老师一点一点完善代码和文档结构,最终一个Web框架的雏形会显现出来,然后引出之后要学习完善的的Web框架. Web框架的本质 Web服务端的本质就是一个socket服务端,而我们的浏览器就是socket客户端.浏览器发送的请求就是一次socket请求.一次请求获得一次响应,然后就断开,这是一个短连接.下面是一个服务端的python代码,直接用socket,实现一个简单的Hello World: import socket def handle_request(conn):