python学习第三个坑
##########################python 第三章 ################################
这一章呢,主要是文件的操作,还有涉及到函数的一部分.
PS:整理博客很是费事,这就是我写的笔记,本来在线下挺好看的。拿到这里就成这熊样了,没办法。。。凑活着看吧
文件操作:
文件操作一般用open,或者用file,
格式如下:
变量名 = open('文件路径','模式','字符编码')
读取文件需要操作硬件,用户是无法直接操作硬件的,一般操作系统才有这个功能去调用硬件,所以当你告诉你
操作系统去读取a.txt 这个文件的时候,操作系统会返回一个文件的标识,这个标识就是文件句柄,你只有
拿到了这个文件的句柄你才可以去进行操作.操作完成之后一定要关闭它,不要老是占着茅坑不拉屎.别人还得用
呢.
文件操作从大的方向来说,无非就是两种: 读 写.然后这两个下面就开始分化了.
1.读
读根据需求又分:
只读: r 只能读,不能写
读写: r+ 可以读,也可以写,但是
二进制读: rb(r+b) 这个是安照二进制的格式读取.(比如读取非文本的时候,就必须用到b)
#####注意#######
1. 如果一个文件不存在,读的时候会报错
###### ####################################
读的一些操作:
f = open('a.txt','r',encoding='utf-8') #获取文件句柄
data = f.read()
f.close() #关闭文件
print(data) #大打印文件内容
读文件的几个方法:
read() : 读取文件的所有内容到内存,如果文件过大,不要这样.
readlines(): 读取文件的所有内容到内存,返回的是一个列表
readline() : 读取文件,但是不会全部读取,而是一行行 的读取.栗子如下:
f = open('a.txt','r',encoding='utf-8')
f.seek(0)
data = f.readline()
while data:
print(data.strip())
data = f.readline().strip()
f.close()
readable() : 检查文件是否可读,返回bool值.
##这个是读取一个图片的例子
import os
with open('sb.jpg','rb') as read_f,open('new_sb.jpg','wb') as write_f:
write_f.write(read_f.read())
os.remove('sb.jpg')
os.rename('new_sb.jpg','sb.jpg')
关闭文件的参数:
close() : 关闭文件
closed() : 是否关闭了文件
2.写
写根据需求又分:
只写: w 只能写,不能读
写读: w+ 可以写,也可以读
二进制写: wb(w+b) 这个是安照二进制的格式写.(比如写非文本的时候,就必须用到b)
########### 注意 #########
1. 使用write的时候,是把文件给清空,然后在写入,原有的文件内容不存在
2. 如果文件不存在,则创建
####################################
写的操作方法:
write(): 写入内容
writelines() : 写的是可以迭代的对象,他会对这个东西进行逐个的迭代.然后写入文件
writeable() : 检测是否可写
这里出现了一个新的写------追加
追加: a 这个只追加,
读写: a+ 这个可以写,可以读
二进制追加: ab(a+b) 这个是安照二进制的格式追加.(比如写非文本的时候,就必须用到b)
追加的操作方法:
和写的操作方法,一样,不过是在内容的结尾增加
文件其他的操作方法:
seek(): 光标到内容的任意地方,不过是按照字节来的.有三个数字 0 1 2
0 ---> 文章的开头
1 ---> 当前光标的位置
2 ---> 文章的结尾
seek(p,0) 移动当文件第p个字节处,绝对位置
seek(p,1) 移动到相对于当前位置之后的p个字节
seek(p,2) 移动到相对文章尾之后的p个字节
truncate(): 截断,也是按照字节来的,只保留前面的,后面的不要
flush(): 刷新到磁盘上
操作文件的另个一个方法叫 上下文管理,如果这么写了的话,就不不需要在写close()这个方法了.
with open('a.txt','r',encoding='utf-8') as f1,open('b.txt','w+',encoding='utf-8') as f2:
print(f1.readlines())
print(f2.readlines())
一个简单tail -f 功能
import time
with open('access.log','r',encoding='utf-8') as read_f:
read_f.seek(0,2)
while True:
data = read_f.read().strip()
if data:
print('新增一行数据: ',data)
time.sleep(0.5)
########################## 函数 ################################
函数使用的原因:
1. 方便管理
2. 减少了代码冗余,
3. 有结构性,可读性高
在python 函数分为两类: 一个是内置函数, 一个是自定义函数
内置函数:
这种的最常见了,字符串常见的方法就是一个个的函数
比如说list中的 max min reserve sort 等等
自定义函数:
顾名思义,自己定义的函数,至于为啥定义,还不是系统中的函数满足不了自己的需求
格式:
def 函数名():
函数体
......
函数的参数:
从大的角度来分,有两种分为实参和形参,实参一在函数调用的时候,形参在函数创建的时候
###定义阶段
def print_new(x,y,z): ##这里的x,y就是形参,形参起站位的作用,而且在调用的时候必须传值.
print(y) ## 传的值必须对应
print(y)
print(z)
###调用阶段
print_new(1,2,3) ##这里的1和2就是实参 ,有两种方法来传值,如果是明确指定的话,可以不用
print_new(y=2,x=2222,z=666)##理会参数的顺序
继续细分的话有以下几种参数:
位置参数,关键字参数,默认参数,可变长参数(*args,**kwargs),命名关键字参数
位置参数: 不在解释,上面的例子就是位置参数
关键字参数: key=value这种情况,就是在函数调用的时候输入的东西,print_new(y=2,x=1111),这种的就
就叫关键字参数
####注意事项###
1:关键字实参必须在位置实参后面
print_new(1,y=222,z=6666)
2: 不能重复对一个形参数传值
print_new(2,x=2,z=666,y=222) ###这个是错误的
默认参数: 之所以会出现这个东西,就是因为减少了重复的操作.
例子:
def new_foo (name,sex,age=18):
a='{}的性别是{},他的年龄是{}'
print(a.format(name,sex,age))
new_foo('刘康','男
如果用户不输入age,将自动使用函数里面的值,如果用户输入了值,则使用户输入的值
#####注意事项#####
1. 在定义默认参数的时候,一定要写在位置参数后面,
2. 默认参数只在定义阶段定义,且只定义一次(也就是说,
即使你在外面声明了变量,还是改变不了结果)
age=20
def new_foo (name,sex,age=18):
a='{}的性别是{},他的年龄是{}'
print(a.format(name,sex,age))
age = 16
new_foo('刘康','男') ##age的结果仍是18
3. 默认参数的值通常定义成不可变类型
可变长参数: 这个参数分为两种一个是 *args 另一个是 **kwargs
1. *args :
*会把溢出的按位置定义的实参都接收,以元组的形式赋值给args
def test_foo (x,y,*args):
print(x,y)
print(args) ###这个地方打印的其实是元组
test_foo(111,222,333,444,555)
>>> 111 222
(333,444,555)
2. **kwarges: 这个会把溢出的默认参数都接受,以字典的形式给kwargs
def test_foo2 (x,y,**kwargs):
print(x,y)
print(kwargs) ###这个地方打印的其实是个字典
test_foo2('liu','kang',name='liukang',age=18)
def foo (name,age,**kwargs):
print(name,age)
if 'sex' in kwargs:
print(kwargs['sex'])
if 'height' in kwargs:
print(kwargs['height'])
foo('liukagn',18,sex='男',height=188)
命名关键字参数:很奇葩的一个,用"*" 号分隔
def foo_name (name,age,*,sex='男性',height):
print(name,age)
print(sex,height)
foo_name('liukang',18,height=188)
# 调用的时候*号后面的参数就是命名关键字参数,这类参数必须传值,而且必须以关键字
# 实参的方式去传值
一个小例子,说了*args和**kwargs的关系,另外,如果用了*args 和**kwargs那么可以接受所有的参数
def foo(x,y,z):
print('from foo: ',x,y,z)
def foo2(*args,**kwargs):
print(args) #(1,)
print(kwargs) #{'z':2,'y':3}
foo(*args,**kwargs) #foo(*(1,),z=2,y=3)
foo2(1,z=2,y=3)
##上面的效果和下面的一样
foo(*(1,),z=2,y=3)
python学习第三个坑的更多相关文章
- python学习第三次记录
python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...
- Python 学习 第三天 课后总结:
PYTHON学习第三天课后总结: 1,注释:就是对代码起到说明注解的作用. 注释分为单行注释与多行注释. 单行注释:只注释一行代码在需要注释的所在行的行首使用#号来注释此行,注意#与代码之间需要 ...
- Python学习(三) 八大排序算法的实现(下)
本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- python 学习(三)
按照上次python 学习(二)的思路,第一步要实现从一个网站的页面上自动获取指定列表中的信息.折腾数日,得到一段可以正常运行的代码,如下: #web2.py import re import url ...
- python学习(三):matplotlib学习
前言:matplotlib是一个python的第三方库,里面的pyplot可以用来作图.下面来学习一下如何使用它的资源. 一.使用前 首先在python中使用任何第三方库时,都必须先将其引入.即: i ...
- webdriver(python) 学习笔记三
知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...
- [Python学习] 模块三.基本字符串
于Python最重要的数据类型包含字符串.名单.元组和字典.本文重点介绍Python基础知识. 一.字符串基础 字符串指一有序的字符序列集合,用单引號.双引號.三重(单 ...
- PYTHON学习(三)之利用python进行数据分析(1)---准备工作
学习一门语言就是不断实践,python是目前用于数据分析最流行的语言,我最近买了本书<利用python进行数据分析>(Wes McKinney著),还去图书馆借了本<Python数据 ...
随机推荐
- dubbo+zipkin调用链监控
分布式环境下,对于线上出现问题往往比单体应用要复杂的多,原因是前端的一个请求可能对应后端多个系统的多个请求,错综复杂. 对于快速问题定位,我们一般希望是这样的: 从下到下关键节点的日志,入参,出差,异 ...
- 关于css禁止文本复制属性
最近在做DHTMLX框架替换,新框架dhx的grid是不能选中内容复制的 虽然相对来说是安全些的,但是客户体验度一定会大打折扣 网页上禁止复制主要靠JavaScript来实现.<BODY onc ...
- mongo数据库基础
mongodb mongodb特性 分布式文件存储 介与关系数据库和非关系数据库之间 文件存储格式为BSON(一种JSON的扩展) BSON是对二进制格式的JSON的简称,BSON支持文档和数组的嵌套 ...
- 《阿里巴巴Java开发手册(正式版》读记
前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方 ...
- Java设计模式:代理模式(二)
承接上文 三.计数代理 计数代理的应用场景是:当客户程序需要在调用服务提供者对象的方法之前或之后执行日志或者计数等额外功能时,就可以用到技术代理模式.计数代理模式并不是把额外操作的代码直接添加到原服务 ...
- pl/sql 笔记之存储过程、函数、包、触发器(下)
一.存储过程.存储函数 1.What's This? ①.ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. ②.存储过程.存储函数的唯 ...
- 腾讯实习面经(offer)
腾讯的实习招聘也算是告一段落了.从内推到正式实习生招聘,总结一下.看了这么多面经,也把自己的经历写一下,有需要的朋友可以参考一下.毕竟互帮互助嘛. 内推 腾讯内推的经历比较惨淡,面了三个部门,都跪在一 ...
- 创建一个JS函数,运用JS中arguments对象
Javascript中有个内置的arguments对象. arguments对象包含了参数调用的参数数组. <p>查找最大的数.</p> <p id="demo ...
- DFB系列 之 SetCooperativeLevel协作级别
1. 函数原型解析 函数声明 function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall; 设置指定的IDir ...
- linux操作系统中对大小端的判断
static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } }; #define ENDIA ...