1. 集合操作   

集合的特点:无序,不重复的数据组合

集合的作用:

  • 去重,将列表变为集合,就会自动去重
  • 关系测试,测试两组数据之间的交集、差集、并集关系

常用操作:

#创建集合
s = {1,2,35,6}
#将列表变为集合
list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1) list_2 =set([2,6,0,66,22,8,4])
print(list_1,list_2) #常用操作
#交集
print(list_1.intersection(list_2) ) #并集
print(list_1.union(list_2)) #差集 in list_1 but not in list_2
print(list_1.difference(list_2))
print(list_2.difference(list_1)) #子集
list_3 = set([1,3,7])
print(list_3.issubset(list_1))
print(list_1.issuperset(list_3)) #对称差集:去掉交集部分剩下的就是所要的结果
print(list_1.symmetric_difference(list_2)) #判断两个集合之间有没有交集部分
print("-------------") list_4 = set([5,6,7,8])
print(list_3.isdisjoint(list_4)) # Return True if two sets have a null intersection. 也可以用符号来取代函数:
a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
#例如下面的例子:
#交集
print(list_1 & list_2)
#union(并集)
print(list_2 | list_1) #difference(差集)
print(list_1 - list_2) # in list 1 but not in list 2 #对称差集
print(list_1 ^ list_2) #其他操作: #添加:
t.add('x) #添加一项
s.update([2,3,654]) #添加多项 #删除
t.remove('h') #删除一项,如果这一项不存在就会报错
t.pop() #随机删除一项
t.discard() #删除特定的一项,如果这一项不存在不会报错,会返回一个None #求长度
len(s) #判断x是否是集合s的成员
x in s
x not in s #判断s是否是t的子集,返回 true or false
s.issubset(t) #判断s是否是t的父集 true or false
s.issupperset(t) #判断两者是否有关系,没有关系则返回true,有关系则返回false
isdisjoint() #浅复制
s.copy() #返回s的一个浅复制

2.文件操作

对文件的操作流程:

1.打开文件,得到文件句柄并赋值给一个变量

2.通过句柄对文件进行操作

3.关闭文件

例:

文件如下:

 Somehow, it seems the love I knew was always the most destructive kind
不知为何,我经历的爱情总是最具毁灭性的的那种
Yesterday when I was young
昨日当我年少轻狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戏弄生命 视其为愚蠢的游戏
The way the evening breeze
就如夜晚的微风
May tease the candle flame
逗弄蜡烛的火苗
The thousand dreams I dreamed
我曾千万次梦见
The splendid things I planned
那些我计划的绚丽蓝图
I always built to last on weak and shifting sand
但我总是将之建筑在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白昼赤裸的阳光
And only now I see how the time ran away
事到如今我才看清岁月是如何匆匆流逝
Yesterday when I was young
昨日当我年少轻狂
So many lovely songs were waiting to be sung
有那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
I ran so fast that time and youth at last ran out
我飞快地奔走 最终时光与青春消逝殆尽
I never stopped to think what life was all about
我从未停下脚步去思考生命的意义
And every conversation that I can now recall
如今回想起的所有对话
Concerned itself with me and nothing else at all
除了和我相关的 什么都记不得了
The game of love I played with arrogance and pride
我用自负和傲慢玩着爱情的游戏
And every flame I lit too quickly, quickly died
所有我点燃的火焰都熄灭得太快
The friends I made all somehow seemed to slip away
所有我交的朋友似乎都不知不觉地离开了
And only now I'm left alone to end the play, yeah
只剩我一个人在台上来结束这场闹剧
Oh, yesterday when I was young
噢 昨日当我年少轻狂
So many, many songs were waiting to be sung
有那么那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
There are so many songs in me that won't be sung
我有太多歌曲永远不会被唱起
I feel the bitter taste of tears upon my tongue
我尝到了舌尖泪水的苦涩滋味
The time has come for me to pay for yesterday
终于到了付出代价的时间 为了昨日
When I was young
当我年少轻狂

基本操作:

f = open('music',encoding="utf-8")
first_line = f.readline()
print('first line:',first_line) #读一行
print('我是分割线'.center(50,'-'))
data = f.read() #读取剩下的所有内容,文件太大不宜使用
print(data)#打印文件 f.close() #关闭文件
  

打开文件的模式有如下几种:

  • r,  只读模式(默认)
  • w, 只写模式【不可读;不存在则创建;存在则删除内容】
  • a,追加模式【可读;不存在则创建;存在则追加内容】

“+”表示同事读写某个文件

  • r+,可读写文件【可读;可写;可追加】
  • w+,写读文件
  • a+,同a【可读;不存在则创建;存在则追加内容】

“b”表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件需要标注)

  • rb
  • wb
  • ab

常用操作:

 f = open('music',encoding="utf-8")
for index, line in enumerate(f.readlines()):
if index == 9:
print("------------------------我是分割线---------------------")
continue
print(line.strip())

(不推荐)上述这种方法比较占用内存,因为f.readlines()只适合读取小文件,并且是放到内存里面读取的

(推荐)用下面这个方法效率比较快,因为是一句一句读,并且打印输出

 count = 0
for line in f:
count += 1
if count == 2:
print('----我是分割线----------')
# count += 1
continue
print(line)
#“+”的表示形式
f = open("yesterday2",'r+',encoding="utf-8") #文件句柄 读写
f = open("yesterday2",'w+',encoding="utf-8") #文件句柄 写读
f = open("yesterday2",'a+',encoding="utf-8") #文件句柄 追加读写

#二进制文件的表示形式:

f = open("yesterday2",'wb') #文件句柄  二进制文件
f.write("hello binary\n".encode()) #将字符串encoding成二进制文件
f.close()

另外:print(f,type(f)) 打印输出的是字符串的形式

print(f.readlines())打印输出的是列表形式

如果要进行修改文件:

 #先打开两个文件,其修改之后的文件在yesterday2.bak里面
f = open("yesterday2","r",encoding="utf-8")
f_new = open("yesterday2.bak","w",encoding="utf-8") for line in f:
if "有那么多肆意的快乐等我享受" in line:
line = line.replace("肆意的快乐等我享受","肆意的快乐等Alex享受")
f_new.write(line)
f.close()
f_new.close()

进度条:

import sys,time

for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1) 另外还有其他函数:

f.seek() 移动光标到哪个字符位置

f.tell() 总共有多少个字符

f.encoding()

f.errors

f.flush()     缓存满了就存在内存里面

f.buffer()     强制刷新内存

dir(f.buffer())

with语句:

为了避免打开文件后忘记关闭,可以通过管理上下文,即:
import sys
with open("yesterday2","r","encoding="utf-8" as f,\
open("yesterday2","r","encoding="utf-8"as f2:
for line in f:
print(line)
当with代码块执行完毕时,内部会自动关闭并释放文件资源。

编码解码:

说明:

1.Python3中默认的是utf-8,Python2默认是Ascii码

2.unicode分为uft-32(4个字节),utf-16(占2个字节),utf-8(占1-4个字节)。所以:utf-8就是unicode

3.在python3中encode,转码同事还会把string类型变为bytes类型,decode解码同时会将bytes类型变回string类型

4.gbk→ utf-8:先将gbk编码decode为Unicode(decode(gbk)),再encode为utf-8

 utf-8→ gbk:先将utf-8编码decode为unicode(decode(utf-8)),再encode为gbk

练习:

s = "你好"    #unicode类型
s_gbk = s.encode("gbk") #gbk print(s_gbk)
print(s.encode()) #utf8
print(s.encode("utf-8")) gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8")
print("utf8",gbk_to_utf8) 
 s = "你好"   #unicode类型
print(s.encode("gbk"))
print(s.encode("utf-8"))
print(s.encode("utf-8").decode("utf-8").encode("gb2312"))
print(s.encode("utf-8").decode("utf-8"))

3.函数

函数的特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

函数要有返回值,如果没有指定返回值,则返回none

语法定义:

def hello():  #函数名
print("hello,i am alex")
hello() #调用函数
def func1():
"""testing1"""
print('in the func1')
return 0
#过程
def func2():
'''testing2'''
print('in the func2')
x=func1()
y=func2() print('from func1 return is %s' %x)
print('from func2 return is %s' %y)

也可以带参数:

1.位置参数:

 def func(name):   #形参
pring name
func('alex') #实参

2.默认参数(指如果没有传实参过去那么就取形参时给的值)

def func(name,age = 18):
print(("name is %s,age is %d)%(name,age) #指定参数
func('alex',23)
#使用默认参数
func('alex')

3.关键参数

注意:关键参数必须放在位置参数后面,否则会出错

 def test(x,y,z):
print(x)
print(y)
print(z)
test(y=2,x=1,3)

4.动态参数(*args,**args)

def func(*args):
print(args)
#执行方式一:
func(11,22,33,44) #args=[11,22,33,44]
#执行方式二: func(*[11,22,33,44]) #args=[11,22,33,44]
#总结:*args接收的是n个位置参数,转换成元组
 def func(**args):
print(args)
func(name = 'alex',age = '') #传入key值和键值 args={'name':alex,'age':20} li = {name: 'alex',age:20,gender:'female'}
func(**li) #传入一个字典 args={name: 'alex',age:20,gender:'female'}
 *args接收n个关键字参数,并把关键字参数转换成字典

输出当前时间:time.strftime()

 #输出现在的时间
import time
def logger():
time_format = "%Y-%m-%d %X"
time_current = time.strftime(time_format)
with open('a.txt','a') as f:
f.write('%s end action\n'%time_current)
logger()

全局变量和局部变量(函数体内定义的变量,只作用于函数体内)

  备注:字符串,单独整数不可在局部里面进行修改;字典,列表,集合,类等都可以在函数里面通过局部变量可以修改值

 name = "Alex"   #全局变量

 def change_name(name):
print("before:",name) #name=alex
name ="Alex,金角大王"
print("after:",name) #name="Alex,金角大王"
change_name(name)
print("外面的变量:",name) #name="Alex"
name = ["alex","jack","rain"]
def change_name():
name[0]="金角大王"
print("inside:",name) #name =["金角大王","jack","rain"]
change_name()
print("外面的name:",name) #name =["金角大王","jack","rain"]

递归(在函数内部调用自己)

 def calc(n):
print(n)
if int(n/2)==0:
return n
return calc(int(n/2))
calc(10) #输出:
10
5
2
1

递归特性:

1.要有明确的结束条件

2.递归次数不断减少

3.递归层次过多,会导致栈溢出

Python第二模块(文件和函数)的更多相关文章

  1. Python::OS 模块 -- 文件和目录操作

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的进程管理 Python::OS 模块 -- 进程管理 os模块的进程参数 Python::OS 模块 -- 进程参数 os模块中包 ...

  2. python读写Excel文件的函数--使用xlrd/xlwt

    python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket  The ...

  3. python os模块 文件操作

    Python内置的os模块可以通过调用操作系统提供的接口函数来对文件和目录进行操作 os模块的基本功能: >>> import os >>> os.name 'po ...

  4. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  5. Python 第二模块学习总结

    学习总结: 1.掌握对装饰器的用法 2.掌握生成器的用法 3.掌握迭代器的用法 4.熟悉Python内置函数 5.熟悉Python shutil/shelve/configparse/hashlib/ ...

  6. python os模块文件相关

    使用前 import os导入模块   os模块: os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n ...

  7. python中不同文件中函数和类的调用

    最近在学习Python的时候,遇到了一个不同文件中类无法调用的问题,搜了很多,发现很多人针对 这个问题都说的相当含糊,让我费了好大劲才把这个东东搞明白.记录一下,权且温习. 调用分两种,一种是同种文件 ...

  8. Python -- 使用模块中的函数

    在确定自己不会导入多个同名函数(从不同模块导入)的情况下,你可能不希望在每次调用函数的时候,都要写上模块的名字.那么,可以使用import命令的另外一种形式: >>> from ma ...

  9. [Python]-os模块-文件读取

    import os 在Python中,os模块用来处理文件路径,比较方便. os读取文件 在读取文件过程中,最常用的几个功能如下: os.listdir() 获取此目录下的所有目录名,并且存为列表.在 ...

随机推荐

  1. Python爬虫 网页图片

    一 概述 参考http://www.cnblogs.com/abelsu/p/4540711.html 弄了个Python捉取单一网页的图片,但是Python已经升到3+版本了.参考的已经失效,基本用 ...

  2. ArcGIS Engine渲染

    符号化之Renderer( 渲染)体系 ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类.接下来分别介绍FeatureRender和RasterRender. ...

  3. Linux学习笔记之——基础命令学习

    1.find 按照名字查找:find / -name file_name   2.zip压缩 1) 我想把一个文件repartition.txt和一个目录invader压缩成为amateur.zip: ...

  4. 使用Delphi收发GMail的邮件

    GMAIL的端口和连接方式比较特殊:SMTP端口为:456POP3端口为:995都采用安全连接(SSL)这些通过Indy组件就可以实现参考代码如下: object IdConnectionInterc ...

  5. Android 进程通信机制之 AIDL

    什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在 ...

  6. 高斯模糊算法的 C++ 实现

    2008 年在一个 PS 讨论群里,有网友不解 Photoshop 的高斯模糊中的半径是什么含义,因此当时我写了这篇文章: 对Photoshop高斯模糊滤镜的算法总结: 在那篇文章中,主要讲解了高斯模 ...

  7. controller共享数据

    刚开始使用angularjs,能感受到他的强大,也在学习的途中遇到一些问题 一般我们在angularjs中共享数据使用DI的方法,具体代码如下: <script> angular.modu ...

  8. 可分组的选择框控件(MVVM下)(Toggle样式 仿造单选框RadioButton,复选框CheckBox功能)

    原地址: http://www.cnblogs.com/yk250/p/5660340.html 效果图如下:支持分组的单选框,复选框样式和MVVM下功能的实现.这是项目中一个快捷键功能的扩展. 1, ...

  9. C#编写WIN32系统托盘程序

    基本功能概述: 程序运行后驻留系统托盘,左键呼出,右键退出.后续可加右键菜单. 注册系统案件WIN+F10,呼出程序. 重写系统消息,最小化和关闭按钮隐藏程序 using System; using ...

  10. java comet

    http://www.javaworld.com/article/2077995/java-concurrency/asynchronous-processing-support-in-servlet ...