1. file
⑴ 打开文件方式(读写两种方式)
方法一:
f = open('log.txt',mode ='r',encoding = 'utf-8')
f.close()
方法二:
with open('a.txt') as f:
data = f.read()
模式 | 说明 |
---|---|
r | 只读模式 |
w | 只写模式,创建新文件,删除任何同名的文件 |
a | 追加到现有文件,如果文件不存在就创建一个 |
r+ | 读写模式 |
⑵ 文件对象的操作方法
方法 | 说明 |
---|---|
read([size]) | 以字符串的形式返回文件数据,可以选择size参数用于说明读取的字节数 |
readlines([size]) | 将文件返回为行列表,可选择参数size |
write(str) | 将字符串写入文件 |
close() | 关闭句柄 |
flush() | 清空内部I/O缓冲区,并将数据强行写回磁盘 |
seek(pos) | 移动光标到指定位置,起始为0 |
tell() | 返回光标目前的位置 |
closed | 如果文件已关闭,则为True |
⑶ 学习对excel及csv文件进行操作
python读写csv文件
import csv
#读取csv文件内容方法1
csv_file = csv.reader(open('file_name.csv','r'))
next(csv_file, None) #skip the headers
for i in csv_file:
print(i)
#读取csv文件内容方法2
with open('file_name.csv', 'r') as csv_file:
reader = csv.reader(csv_file)
next(csv_file, None)
for i in reader:
print(user)
#从字典写入csv文件
dic = {'aa':2, 'bb':3}
csv_file = open('file_name.csv', 'w', newline='')
writer = csv.writer(csv_file)
for key in dic:
writer.writerow([key, dic[key]])
csv_file.close() #close CSV file
csv_file1 = csv.reader(open('file_name.csv','r'))
for i in csv_file1:
print(i)
python读写excel文件
import xlrd, xlwt #xlwt只能写入xls文件
#读取xlsx文件内容
rows = [] #create an empty list to store rows
book = xlrd.open_workbook('testdata.xlsx')
sheet = book.sheet_by_index(0) #打开第一张表格
for user in range(1, sheet.nrows):
rows.append(list(sheet.row_values(user, 0, sheet.ncols))) #遍历工作表并从列表中的行获取数据
print(rows)
#写入xls文件
rows1 = [['Name', 'Age'],['aa', '2'],['bb', '5']]
book1 = xlwt.Workbook()
sheet1 = book1.add_sheet('user') #create new sheet
for i in range(0, 3):
for j in range(0, len(rows1[i])):
sheet1.write(i, j, rows1[i][j])
book1.save('testdata1.xls')
2.os模块
os模块是对操作系统进行操作。
#导入模块
import os
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
result = os.getcwd()
print(result)
#chdir()改变当前工作目录
os.chdir('/home/sy')
result = os.getcwd()
print(result)
#listdir() 获取指定文件夹中所有内容的名称列表
result = os.listdir('/home/sy')
print(result)
#mkdir() 创建文件夹
os.mkdir('girls')
os.mkdir('boys',0o777) # mode=0o777 -- 权限模式
#makedirs() 递归创建文件夹
os.makedirs('/home/sy/a/b/c/d')
#rmdir() 删除空目录
os.rmdir('girls')
#removedirs 递归删除文件夹 必须都是空目录
os.removedirs('/home/sy/a/b/c/d')
#rename() 文件或文件夹重命名
os.rename('/home/sy/a','/home/sy/alibaba'
os.rename('02.txt','002.txt')
#stat() 获取文件或者文件夹的信息
result = os.stat('/home/sy/PycharmProject/Python3/10.27/01.py)
print(result)
#system() 执行系统命令(危险函数)
result = os.system('ls -al') #获取隐藏文件
print(result)
环境变量
环境变量是一些命令的集合,操作系统的环境变量就是操作系统在执行系统命令时搜索命令的目录的集合。
#getenv() 获取系统的环境变量
result = os.getenv('PATH')
print(result.split(':'))
#putenv() 将一个目录添加到环境变量中(临时增加仅对当前脚本有效)
os.putenv('PATH','/home/sy/下载')
os.system('syls')
#exit() 退出终端的命令
#os模块中的常用值
#curdir 表示当前文件夹 .表示当前文件夹 一般情况下可以省略
print(os.curdir)
#pardir 表示上一层文件夹 ..表示上一层文件夹 不可省略!
print(os.pardir)
os.mkdir('../../../man')#相对路径 从当前目录开始查找
os.mkdir('/home/sy/man1')#绝对路径 从根目录开始查找
#name 获取代表操作系统的名称字符串
print(os.name) #posix -> linux或者unix系统 nt -> window系统
#sep 获取系统路径间隔符号 window ->\ linux ->/
print(os.sep)
#extsep 获取文件名称和后缀之间的间隔符号 window & linux -> .
print(os.extsep)
#linesep 获取操作系统的换行符号 window -> \r\n linux/unix -> \n
print(repr(os.linesep))
导入os模块
import os
#abspath() 将相对路径转化为绝对路径
path = './boys'#相对
result = os.path.abspath(path)
print(result)
#dirname() 获取完整路径当中的目录部分 & basename()获取完整路径当中的主体部分
path = '/home/sy/boys'
result = os.path.dirname(path)
print(result)
result = os.path.basename(path)
print(result)
#split() 将一个完整的路径切割成目录部分和主体部分
path = '/home/sy/boys'
result = os.path.split(path)
print(result)
#join() 将2个路径合并成一个
var1 = '/home/sy'
var2 = '000.py'
result = os.path.join(var1,var2)
print(result)
#splitext() 将一个路径切割成文件后缀和其他两个部分,主要用于获取文件的后缀
path = '/home/sy/000.py'
result = os.path.splitext(path)
print(result)
#getsize() 获取文件的大小
path = '/home/sy/000.py'
result = os.path.getsize(path)
print(result)
#isfile() 检测是否是文件
path = '/home/sy/000.py'
result = os.path.isfile(path)
print(result)
#isdir() 检测是否是文件夹
result = os.path.isdir(path)
print(result)
#islink() 检测是否是链接
path = '/initrd.img.old'
result = os.path.islink(path)
print(result)
getctime() #获取文件的创建时间 get create time
getmtime() #获取文件的修改时间 get modify time
getatime() #获取文件的访问时间 get active time
import time
filepath = '/home/sy/下载/chls'
result = os.path.getctime(filepath)
print(time.ctime(result))
result = os.path.getmtime(filepath)
print(time.ctime(result))
result = os.path.getatime(filepath)
print(time.ctime(result))
#exists() 检测某个路径是否真实存在
filepath = '/home/sy/下载/chls'
result = os.path.exists(filepath)
print(result)
#isabs() 检测一个路径是否是绝对路径
path = '/boys'
result = os.path.isabs(path)
print(result)
#samefile() 检测2个路径是否是同一个文件
path1 = '/home/sy/下载/001'
path2 = '../../../下载/001'
result = os.path.samefile(path1,path2)
print(result)
#os.environ 用于获取和设置系统环境变量的内置值
import os
#获取系统环境变量 getenv() 效果
print(os.environ['PATH'])
#设置系统环境变量 putenv()
os.environ['PATH'] += ':/home/sy/下载'
os.system('chls')
3.datetime模块
⑴ 获取当前datetime
time = datetime.datetime.now()
print time #输出如下日期-时间(精确到微秒,小数点后6位)
⑵ 获取当天date
#获取今天的时间
time = datetime.date.today()
#获取明天的时间
time = datetime.date.today()+datetime.timedelta(days=1)
#3天前的时间
time = datetime.date.today()-datetime.timedelta(days=3)
时间的数据类型转换
⑴ datetime类型转换为string类型
#datetime类型转换为string类型
time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#datetime类型转换为date类型(记住这种写法,去掉date就是具体时间,加上date就是日期)
time = datetime.datetime.now().date()
#进行时间(天)的计算
time = datetime.datetime.now().date()-datetime.timedelta(days = 1) #这里如果不写days默认也是days
4.类和对象
- 类:现实世界一组对象的抽象。
- 定义:具有共同属性的共同行为的一组对象的集合。
- 实例:就是类的成员,也就是实体(而类是泛指)
- 对每个对象都自动具备这种通用行为,然后可以根据需要赋予每个对象独特的个性。 类和实例的关系:根据类来创建对象被称为实例化。
- 类是用来描述实体(对象)的‘模板’或‘原型’,而对象是实际的实体,每个对象都是类的一个实例,所以通常“为类创建一个对象”也被叫做“为类创建一个实例”从对象角度就是“实例化一个类的对象”。
class ClassName():
def __init__(self,var1,var2)
#类属性
self.var1 = var1
self.var2 = var2
def function1(self,var1)
print(XXX)
def function2(self)
print(XXX)
类中的函数称为方法
方法__init__()开头和末尾各有两个下划线是一种约定,旨在避免python默认方法与普通方法发生名称冲突。
修改属性的三个方法:
- 直接修改属性值;
- 通过方法修改属性值;
- 通过方法对属性的值进行递增或者其他操作。
继承
创建子类时,父类必须包含在当前文件中,且位于子类前。定义子类时,必须在括号内指定父类的名称。
class 父类():
XXXX
class 子类(父类):
def __init__(self,var1,var2)
super().__init__(var1,var2)
self.var3 = XX
def function(self):
xxx
导入类
from 模块 import 类1,类2
from 模块 import * #(不推荐这样导入方式,这种导入方式不能一眼直观的看出使用了哪些类)
命名
类名采用驼峰命名法,不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
5.正则表达式
正则表达式是一个特殊的字符序列,能帮助你方便的检查一个字符串是否与某种模式匹配。
表达式 | 描述 |
---|---|
a, X, 9, < | 普通字符完全匹配 |
. | 匹配任何单个字符,除了换行符’\n‘ |
\w | 匹配“单词”字符:字母或数字或下划线[a-zA-Z0-9_] |
\W | 匹配任何非字词。 |
\b | 字词与非字词之间的界限 |
\s | 匹配单个空格字符 - 空格,换行符,返回,制表符 |
\S | 匹配任何非空格字符 |
\t, \n, \r | 制表符,换行符,退格符 |
\d | 十进制数[0-9] |
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
\ | 抑制字符的“特殊性”,也叫转义字符 |
6.re模块
re 模块使 Python 语言拥有全部的正则表达式功能。
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 标志位,用于控制正则表达式的匹配方式 |
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号 |
import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 标志位,用于控制正则表达式的匹配方式 |
使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号 |
import re
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
7.http请求
⑴ http请求方式:get和post
get一般用于获取/查询资源信息,在浏览器中直接输入url+请求参数点击enter之后连接成功服务器就能获取到的内容,post请求一般用于更新资源,通过form表单或者json、xml等其他形式提交给服务器端,然后等待服务器端给返回一个结果的方式(这个返回结果一般就是被修改之后的是否成功的状态,或者是修改后的最新数据table等)。
http请求,不论是get还是post请求,都会包含几个部分,分别是header,cookie,get会有param,post会有body。
这个可以通过fiddler里面抓包就可以拿到需要的Headers,一般需要设置的值可能有:
header = {
"Host": "x.x.360.cn",
"Authorization": "Basic: someValue",
"Content-Type": r"application/json",
"Connection": "keep-alive",
"Proxy-Connection": "keep-alive",
"Cookie": "xxxxxxxxx(这里的具体值请自行填写,其他key对应的值也是一样)",
"User-Agent": "360xxxxxx(这里的信息也请自行抓到之后填写,不需要的话,可以不用填写)"
}
针对正式环境和测试环境需要设置url的地址,以及Header的"Host"中的具体域名的方法如下:
(1)正式环境:url中的host也设置成域名,比如:http://%s/search/searchList的%s就替换成 域名,在headers中的"HOST"的键对应的value也是域名,比如说都是"x.y.360.cn"
(2)测试环境: url中的host设置成具体的IP,比如:http://%s/search/searchList的%s就替换成 10.108.225.234这样的具体IP(备注,这个IP就是你们平时开发上测试代码的机器),但是headers中的"HOST"的键对应的value必须得写成域名,比如"x.y.360.cn"
原因:因为一个IP地址对应的服务器上可能会有多个域名,因为可能会上多个不同业务的服务器代码,如此会有一个默认的域名,但是并不一定是你的这个业务对应的域名,所以一定要在headers中的"HOST"中指定域名才可以找到这个域名,从而找到其对应的接口,进行正确的调用。
参考文献:
https://www.cnblogs.com/sunyang945/p/7900957.html
http://www.wklken.me/posts/2015/03/03/python-base-datetime.html
http://www.runoob.com/python3/python3-reg-expressions.html
https://www.cnblogs.com/keke-xiaoxiami/p/5580021.html