Python自动化开发学习2-2

简介:

集合

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

1
2
3
4
5
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))

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

1
2
3
4
5
6
7
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中方法:

1
2
3
4
5
6
7
8
9
10
11
set_a  =  set ([ 1 , 2 , 3 , 4 , 5 ])
set_b  =  { 1 , 3 , 5 , 7 , 9 }
=  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的字符编码。

文件的基本操作:

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

读取文件内容逐行打印:

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
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()之后,再去确认文件的时候都是最新的内容了。

文件的修改

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

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

1
2
3
4
5
6
7
8
9
10
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()

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

1
2
3
4
5
6
7
8
9
10
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来改写一下

1
2
3
4
5
6
7
8
# 注意一下缩进,通过这个判断文件是否操作完毕,从而自动关闭
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)   # 将内容朱行写入到新文件
1
2
3
4
5
6
7
8
9
10
11
# 可以同时对多个文件的上下文进行管理
# 另外,一行代码不建议超过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、允许查询之前的消费记录

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












本文转自骑士救兵51CTO博客,原文链接:http://blog.51cto.com/steed/1978845,如需转载请自行联系原作者
相关文章
|
3天前
|
小程序 程序员 开发者
Python学习心得——小白的成长之路
Python学习心得——小白的成长之路
11 0
|
3天前
|
存储 程序员 API
python web开发示例详解
python web开发示例详解
12 0
|
3天前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如'cat')的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
3天前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
4天前
|
存储 安全 数据库
自动化密码填充:使用Python提高日常工作效率
自动化密码填充:使用Python提高日常工作效率
10 0
|
4天前
|
SQL 数据库 数据库管理
python自动生成SQL语句自动化
python自动生成SQL语句自动化
23 1
|
5天前
|
持续交付 Python
使用Python实现自动化Web内容巡检
使用Python实现自动化Web内容巡检
16 1
|
5天前
|
机器学习/深度学习 数据挖掘 程序员
Python学习难度的具体标准
Python学习难度因个人编程背景、目标、资源和学习能力而异。对有编程经验者来说,Python的简单语法使其易上手;而对于新手,理解基础概念可能需更多时间。不同应用领域(如Web开发、数据分析)的学习曲线也不同。丰富的学习资源适应各种水平,但选择合适资源很重要。成功学习Python需要逻辑思维、问题解决能力及毅力。总的来说,Python学习难度因人而异,需结合自身条件评估。
18 0
|
25天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
70 0
|
26天前
|
Python
python学习10-函数
python学习10-函数

热门文章

最新文章