Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合
1.1 特性
集合是一个无序的,不重复的数据组合,主要作用如下:
- 去重,把一个列表变成集合实现自动去重。
- set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
1.2 常用操作:
s = set([3,5,9,10]) |
# 创建一个数值集合 |
t = set("Hello") |
# 创建一个唯一字符的集合 |
a = t | s |
# 求 t 和 s 的并集 |
b = t & s |
# 求 t 和 s 的交集 |
c = t – s |
# 求差集(项在 t 中,但不在 s 中) |
d = t ^ s |
# 求对称差集(项在 t 或 s 中,但不同时出现在二者中) |
1.3 基本操作:
t.add('x') |
# 添加一项 |
s.update([10,37,42]) |
# 在 s 中添加多项 |
t.remove('H') |
# 删除一项 |
len(s) |
# s e t 的长度 |
x in s |
# 测试 x 是否是 s 的成员 |
x not in s |
# 测试 x 是否不是 s 的成员 |
s.issubset(t) s <= t |
# 测试是否 s 中的每一个元素都在 t 中 |
s.issuperset(t) s >= t |
# 测试是否 t 中的每一个元素都在 s 中 |
s.union(t) s | t |
# 返回一个新的 set 包含 s 和 t 中的每一个元素 |
s.intersection(t) s & t |
# 返回一个新的 set 包含 s 和 t 中的公共元素 |
s.difference(t) s - t |
# 返回一个新的 set 包含 s 中有但是 t 中没有的元素 |
s.symmetric_difference(t) s ^ t |
# 返回一个新的 set 包含 s 和 t 中不重复的元素 |
s.copy() |
# 返回 set “s”的一个浅复制 |
2. 文件操作
2.1 文件操作流程
示例文件:
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- nobody:x:99:99:Nobody:/:/sbin/nologin
- dbus:x:81:81:System message bus:/:/sbin/nologin
2.2 基本操作
f = open('file.txt') |
# 打开文件 |
first_line = f.readline() |
|
print('first line:',first_line) |
# 读一行 |
print('我是分隔线'.center(50,'-')) |
|
data = f.read() |
# 读取剩下的所有内容,文件大时不要用 |
print(data) |
# 打印文件 |
f.close() |
# 关闭文件 |
2.3 打开文件的模式
r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
a,追加模式。【可读;不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
> r+,可读写文件。【可读;可写;可追加】
> w+,写读
> a+,同a
"b" 表示处理二进制文件
> rb
> wb
> ab
2.4 with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
1 2 3 |
with open('log','r') as f: ... |
3. 字符编码与转码
3.1 字符编码方式
3.1.1 ASCII编码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
3.1.2 Unicode编码
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,所有的字符和符号最少(可能更多)由 16 位来表示(2个字节),即:2 **16 = 65536,这里还有个问题:字节数增加后使用空间会直接翻倍!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。
3.1.3 UTF-8编码
是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 通过这种可扩展的方式来存储。
在2.x版本的Python中,解释.py文件的时候,默认是给他一个编码的就是ASCII码,如果在2.x版本中不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码,不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码
3.2 Python编码转化
3.2.1 Python3中的编码转换
#在Python3中默认就是unicode编码
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- name = '小岳岳'
- #转为UTF-8编码
- print(name.encode('UTF-8'))
- #转为GBK编码
- print(name.encode('GBK'))
- #转为ASCII编码(报错为什么?因为ASCII码表中没有‘小岳岳’这个字符集~~)
- print(name.encode('ASCII'))
3.2.2 Pyton2.x中的编码转换
#因为在python2.x中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,需要Unicode做一个转接站点。
GBK转换为UTF-8格式流程:
> 首先通过解码(decode)转换为Unicode编码
> 然后通过编码(encode)转换为UTF-8编码
UTF-8转换为GBK格式流程:
> 首先通过解码(decode)转换为Unicode编码
> 然后通过编码(encode)转换为GBK编码
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- import chardet
- name = '小岳岳'
- print chardet.detect(name)
- #先解码为Unicode编码,然后再从Unicode编码为GBK
- new_name = name.decode('UTF-8').encode('GBK')
- print chardet.detect(new_name)
4. 函数
4.1 基本语法
函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
语法:
def function_name():#函数名
print("Hello, World!")
function_name() #调用函数
可以带参数:
def calc(x,y):
res = x**y
return res #返回函数执行结果
c = calc(a,b) #结果赋值给c变量
print(c)
4.2 函数参数与变量
4.2.1 函数参数
形参是在函数被调用时才分配内存单元,调用结束时立即释放所分配的内存单元,so,形参只在函数内部有效。
实参可以是常量、变量、表达式、函数等,实参在进行函数调用时必须有确,以便把这些值传给形参。故应预先用赋值,输入等办法使参数获得确定值。
上述函数中x,y是形参,a,b是实参。
默认参数
Def stu_register(name,age,country=”CN”):
这样,country参数在调用时不指定就是默认参数CN,指定了的话就是你指定的值。默认参数必须放在未指定默认值的后面。
关键参数
若给函数传参是不想按顺序的话可以指定关键字参数,只需指定参数名即可,但是,关键参数必须放在位置参数之后。
语法:
Stu_register(age=22,name=”poker”)
非固定参数
若函数定义时不确定用户想出入多少个参数,可使用非固定参数
Def stu_register(name,age,*args) #args会把多传入的参数变成一个元组形式
Print(name,age,args)
Stu_register(“poker”,22)
#输出
Poker 22 () #后面这个空元组就是args,因为没传参所以空
Stu_register(“Tom”,28,”CN”,”Python”)
#输出
Tom 28 (‘CN’,’Python’)
还有一个**kwargs
Def stu_register(name,age,*args,**kwargs): #kwargs会把多传入的参数变成一个字典形式
Print(name,age,kwargs)
Stu_register(‘poker’,22)
#输出
#poker 22 () {} #后面这个{}就是kwargs,因为没传值,所以为空
Stu_register(“Tom”,28,”CN”,”Python”,sex=”Male”,school=”Qinghua”)
#输出
#Tom 28 (‘CN’,’Python’) {‘school’:’Qinghua’,’sex’:’Male’}
4.2.2 全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
返回值
Return语句可以返回函数的返回值
> 函数执行时遇到return就会停止执行并返回结果,也代表着函数的结束
> 未指定return,函数返回None
递归
函数内部可以调用其他函数,若函数内部调用自身,该函数为递归函数。
- 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 4 5 6 |
def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res) |
Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数的更多相关文章
- python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- 【python自动化第三篇:python入门进阶】
鸡汤: 多学习,多看书. 推荐书籍:<追风筝的人>,<林达看美国>,<白鹿原> 本节知识点 集合及其操作 文件操作 函数与函数式编程 递归 一.集合及其操作 集合( ...
- Day2 - Python基础2 列表、字符串、字典、集合、文件、字符编码
本节内容 列表.元组操作 数字操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 ...
- Python基础2 列表 元祖 字符串 字典 集合 文件操作 -DAY2
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- python学习笔记(2)--列表、元组、字符串、字典、集合、文件、字符编码
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1.列表和元组的操作 列表是我们以后最长用的数据类型之一,通过列表可以最方便的对数据实现最方便的存储.修改等操作 定 ...
- Python自动化 【第二篇】:Python基础-列表、元组、字典
本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库, ...
- 【0728 | 预习】第三篇 Python基础
第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...
- 【python自动化第十一篇】
[python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
- Python基础-week03 集合 , 文件操作 和 函数详解
一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...
随机推荐
- windows核心编程---第七章 用户模式下的线程同步
用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在 ...
- c++语法随身记
1.memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的 ...
- NOSCRIPT标签的用处
NOSCRIPT标签用来定义在脚本未被执行时的替代内容.也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText. eg:<body> ... . ...
- C#代码示例_集合
C#中数组实现为System.Array类得实例,它们只是集合类(Collection Classes)中的一种类型. 索引符(indexer)是一种特殊类型的属性,可以把它添加到一个类中,以提供类似 ...
- MySQL数据单个数据太大,导入不进去
mysql导入数据,navicat报错: MySQL server has gone away Table Restored: act_ge_bytearray Rolling back... Fin ...
- Java-->Gson序列化及反序列化
--> 首先导入jar包,并添加到Build Path --> 需要User类:有属性.构造方法和setter.getter方法. --> Test 测试类: package com ...
- cache是什么文件?
通常人们所说的Cache就是指缓存SRAM. SRAM叫静态内存,"静态"指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变. 由于CPU的 ...
- python 的内嵌time模板翻译及说明[转]
一.简介 time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 ...
- 知识积累:CGI,FastCGI,PHP-CGI与PHP-FPM
CGICGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.CGI可以用任何一种语 ...
- MSSQL FOR MXL PATH 运用(转载)
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...