Python学习笔记-DAY05

1,File

1.1打开文件的方式(读和写两种方式)

(1)w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写;w+ 是读写内容,只要沾上w,肯定会清空原来的文件
(2)r 读模式,只能读,不能写,而且文件必须存在; r+ 是读写模式,只要沾上r,文件必须存在
(3)a 追加模式,也能写,在文件的末尾添加内容
(4)rb+、wb+、ab+,这种是二进制模式打开或者读取,一些音乐文件。

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(不推荐)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

循环读取一行内容:

file=open('C:\\Users\\Administrator\\Desktop\\text1.txt','r+')#打开此文件
for line in file:#遍历整个文件
    print(line)#输出每一行的内容
    print(type(line))#输出每一行的数据类型
file.close()#关闭文件

用with的方式打开文件,不用担心使用完文件之后忘记关闭,它会自动关闭文件。

with open('C:\\Users\\Administrator\\Desktop\\text1.txt','r+') as file:
    for line in file:
        print(line)
        print(type(line))

向文件中写入内容。

with open('C:\\Users\\Administrator\\Desktop\\text1.txt','a+') as fw:
    fw.write('哈哈哈')

用函数的方式读取文件。

def readfile(filename):
    with open(filename,'r+')as fr:
        fr.seek(0)
        content=fr.read()
        print(content)
readfile('C:\\Users\\Administrator\\Desktop\\text1.txt')

用函数的方式写文件。 

def writefile(filename,content):
    with open(filename ,'a+')as fw:
        fw.seek(0)
        fw.truncate()
        fw.write(str(content))
writefile('C:\\Users\\Administrator\\Desktop\\text1.txt','嘻嘻嘻')

1.2文件对象的操作方法

 file 对象常用的函数: 

序号方法及描述
1

file.close()

关闭文件。关闭后文件不能再进行读写操作。

2

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

5

file.next()

返回文件下一行。

6

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有,光标默认在文件最后。

7

file.readline([size])

读取整行,包括 "\n" 字符。

8

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

9

file.seek(offset[, whence])

设置文件当前位置,seek(0)代表当前位于文件开始。

10

file.tell()

返回文件当前位置。

11

file.truncate([size])

从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

12

file.write(str)

将字符串写入文件,返回的是写入的字符长度。

13

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

1.3学习对Excel及csv文件进行操作

1.3.1对CSV文件进行读写

CSV文件是用逗号分割数值的文件类型,在数据库或者电子表格中,常见的导入导出文件格式就是CSV格式,CSV格式存储数据通常以纯文本的方式存数数据表。

用Python的CSV模块读写CSV文件:

import csv
filename='C:\\Users\\Administrator\\Desktop\\text2.csv'
with open('C:\\Users\\Administrator\\Desktop\\text2.csv','r',encoding='utf-8')as fr:
    file=csv.reader(fr)
    for line in file:
        for i in line:
            print(i)
import csv
with open('C:\\Users\\Administrator\\Desktop\\text2.csv','w',newline='') as file:
    writer=csv.writer(file)
    writer.writerow(['id','age','grade'])
    data=[
           ('1','22','100'),
           ('2','21','90'), 
           ('3','20','99')
         ]
    writer.writerows(data)

1.3.2excel文件的读写

xlrd主要是用来读取excel文件 ;xlwt主要是用来写excel文件,但是由于在xlwt生成的Excel文件最多只能是65536行,一旦数据过多,将会报错,且xlrd和xlwt主要是针对Microsoft Excel 97-2003 工作表 (.xls),而现在Microsoft Excel 工作表 (.xlsx)已经得到普遍的应用,所以我们也可以用openpyxl来写入Excel文件。

import xlrd
workbook=xlrd.open_workbook('C:\\Users\\Administrator\\Desktop\\text3.xls')
table=workbook.sheets()[0]
name=table.name
nrows=table.nrows
ncols=table.ncols
row_value=table.row_values(1)
col_value=table.col_values(2)
print(name)
print(nrows)
print(ncols)
print(row_value)
print(col_value)
for i in range(nrows):
    print(table.row_values(2))
cellvalue=table.cell_value(1,2)
print(cellvalue)

 

import xlwt
workbook=xlwt.Workbook('C:\\Users\\Administrator\\Desktop\\表格1.xls')
sheet=workbook.add_sheet('sheetone')
sheet.write(0,1,'哈哈')
workbook.save('C:\\Users\\Administrator\\Desktop\\表格1.xls')

 

2,os模块

2.1os模块

在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。

2.2常用方法

os.name:输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'。

os.getcwd():查看当前所在路径。

os.listdir(path):列举目录下的所有文件。返回的是列表类型。

os.remove():删除一个文件。

os.system():运行shell命令。

os.path.abspath(path):返回path的绝对路径。

os.path.split(path):将路径分解为(文件夹,文件名),返回的是元组类型。

os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。

os.sep 可以取代操作系统特定的路径分割符。

os.linesep字符串给出当前平台使用的行终止符。

os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。

os.path.normpath(path):规范path字符串形式。

os.path.getsize(name):获得文件大小,如果name是目录返回0L,如果那么为文件,则返回文件的字节数。

os.path.splitext():分离文件名与扩展名。

os.path.join(path,name):连接目录与文件名或目录。

os.path.dirname(path):返回文件路径。

os.path.basename(path):返回文件名。

os.path.getmtime(path):文件或文件夹的最后修改时间,从新纪元到访问时的秒数。

os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数。

os.path.getctime(path):文件或文件夹的创建时间,从新纪元到访问时的秒数。

os.path.exists(path):文件或文件夹是否存在,返回True 或 False。

3,datetime模块

3.1datetime模块介绍

datetime是python内置的处理日期和时间的标准库。

datetime模块中包含以下几类:

类名功能说明
date日期对象,常用的属性有year, month, day
time 时间对象
datetime  日期时间对象,常用的属性有hour, minute, second, microsecond
datetime_CAPI日期时间对象C语言接口
timedelta   时间间隔,即两个时间点之间的长度
tzinfo  时区信息对象

 3.2datetime中包含的常量

常量功能说明用法返回值
MAXYEAR返回能表示的最大年份datetime.MAXYEAR9999
MINYEAR返回能表示的最小年份datetime.MINYEAR1

3.3date对象构成

date对象由year年份、month月份及day日期三部分构成:

获取当前日期和时间:

from datetime import datetime
print(datetime.now())

获取指定日期和时间:

dt = datetime(2019,3,7,12,00)
print(dt)

通过yearmonthday三个数据描述符可以进行访问,也可以用__getattribute__(...)方法获得上述值:

比较两个日期之间的大小关系:

方法名 方法说明      用法
__eq__(…)   等于(x==y)    x.__eq__(y)
__ge__(…)  大于等于(x>=y)     x.__ge__(y)
__le__(…)  小于等于(x<=y)   x.__le__(y)
__lt__(…)  小于(x  x.__lt__(y)
__ne__(…)  不等于(x!=y)  x.__ne__(y)
__gt__(…)大于(x>y)x.__gt__(y)

计算两个日期之间相差多少天:

方法名方法说明用法
__sub__(…)x - yx.__sub__(y)
__rsub__(…)y - xx.__rsub__(y)

4,类和对象

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

方法:类中定义的函数。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

局部变量:定义在方法中的变量,只作用于当前实例的类。

实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化:创建一个类的实例,类的具体对象。

类对象:类对象支持两种操作:属性引用和实例化。属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性名。self代表类的实例,而非类。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

继承:Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义。需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

class DerivedClassName(BaseClassName1):
    <statement-1>
    .
    .
    .
    <statement-N>

多继承:Python同样有限的支持多继承形式。需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

方法重写:如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。super函数是用于调用父类(超类)的一个方法。

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

类的私有属性:

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

类的方法:

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

类的私有方法:

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

运算符重载:Python同样支持运算符重载,我们可以对类的专有方法进行重载。

5,正则表达式

5.1正则表达式简介

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。许多程序设计语言都支持利用正则表达式进行字符串操作。

5.2正则表达式语法

非打印字符描述
\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f匹配一个换页符。等价于 \x0c 和 \cL。
\n匹配一个换行符。等价于 \x0a 和 \cJ。
\r匹配一个回车符。等价于 \x0d 和 \cM。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t匹配一个制表符。等价于 \x09 和 \cI。
\v匹配一个垂直制表符。等价于 \x0b 和 \cK。
特别字符描述
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[标记一个中括号表达式的开始。要匹配 [,请使用 \[。
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{标记限定符表达式的开始。要匹配 {,请使用 \{。
|指明两项之间的一个选择。要匹配 |,请使用 \|。
定位符描述
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界匹配。

6,re模块

正则表达式在Python中通过内嵌形成re模块,我们可以直接调用来实现正则匹配。

import re #引入re模块
a = re.findall("匹配规则", "要匹配的字符串")#调用模块函数
print(a)#以列表形式返回匹配到的字符串

 

7,http请求

 是指从客户端到服务器端请求消息。包括:消息首行中,对资源的请求方法、资源的标识符及使用的协议。

参考资料:

https://www.cnblogs.com/xyf9575/p/7039548.html

https://blog.csdn.net/cmzsteven/article/details/64906245

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值