1.file
a.打开文件方式(读写两种方式)
Python文件打开方式open
- open(name[,mode[buf]])
name:指定文件路径
mode:指定文件打开方式,’w’是写文件,已存在的同名文件会被清空,不存在则会创建一个;’r’是读取文件,不存在会报错;’a’是在文件尾部添加内容,不存在会创建文件,存在则直接在尾部进行添加;还有’wb’是写二进制文件;’rb’是读取二进制文件,比如图片之类的。
buf:用于设置读写文件的缓存buffering的大小
Python文件读取方式read/readline/readlines
- read([size])
size:设置读取size个字节;默认不设置时,读取全部 - readline([size])
读取一行 - readlines([size])
读取完文件,返回一个“由每一行所组成的列表”,使用访问列表的方式来访问文件
Python文件写入方式write/writelines
- write(str)
将字符串写入文件 - writelines(sequence_of_strings)
equence_of_strings:字符串组成的列表
一次性写入多行到文件
b.文件对象的操作方法
f = open(‘test’,mode)
c.学习对excel及csv文件进行操作
Python操作csv
读CSV
import csv
打开文件,用 with open(“./csv/文件名.csv”,”r”) as csvfile:
读取csv文件,返回的是迭代类型 read = csv.reader(csvfile)
for i in read: print(i)
import csv#导入模块
#打开csv文件
with open("E:/Users/DELL/PycharmProjects/untitled1/销售相关企业信息.csv","r") as csvfile:#r代表read
#读取文件
read = csv.reader(csvfile)
# print(read)
for i in read:#使用遍历的方式来读取文件
print(i)
写CSV
with open('./csvtest.csv','w')as csvfile:#这里的w代表write写入
writer = csv.writer(csvfile)
writer.writerow(['id','url','keywords'])
data = [
('1','http://www.xiaoheiseo.com/','小黑'),
('2','http://www.baidu.com/','百度'),
('3','http://www.jd.com/','京东')
]
writer.writerows(data)#多行写入时为writerows 加s
Python操作Excel
利用 xlrd 模块操作 Excel
import xlrd # 导入xlrd模块
# 读取本地csv文件,打开excel文件(默认是rb方式打开)
myWorkbook = xlrd.open_workbook('./某公司贸易数据.xlsx')
# 获取excel工作表
mySheets = myWorkbook.sheets() # 获取工作表
mySheet = mySheets[0] # 通过索引获取
mySheet = myWorkbook.sheet_by_index(1) #通过索引顺序获得
mySheet = myWorkbook.sheet_by_name('产品类别') #通过名字获取
# 获取行数和列数
nrows = mySheet.nrows
ncols = mySheet.ncols
print("The rows: %d" % nrows)#获取行数nrows
print("The cols: %d" % ncols)#获取列数ncols
# 获取一行和一列
for i in range(nrows):
myRowValues = mySheet.row_values(i)
print(myRowValues)
for j in range(ncols):
myColValues = mySheet.col_values(j)
print(myColValues)
# 读取单元格数据
for i in range(nrows):
for j in range(ncols):
mycell = mySheet.cell(i, j)#获取单元格,i是行数,j是列数,行数和列数都是从0开始计数
mycellvalue = mycell.value #通过单元格获取单元格数据
print(mycellvalue)
mycellvalue = mySheet.cell_value(0, 0)#根据行和列的索引获取单元格数据
#mySheet.cell_value(0, 0) = “newValues”# 改变i,j值则改变单元格 (注意: xlrd是只读的,不能修改)
print(mycellvalue)
利用 xlwt 模块 写入excel文件
一般在Python中主要更常见一种做法是利用xlrd模块来读取Excel文件内容, 利用xlwt模块来写入Excel文件内容
import xlwt # 导入xlwt模块
wbk = xlwt.Workbook() # 创建工作簿
sheet = wbk.add_sheet(‘表01’) # 创建工作表
sheet.write(0,1,'test text’) # 在一列二行写入信息
wbk.save(‘./excel/test.xls’) # 保存 Excel 文件
print("ok")
xlutils结合xlrd操作Excel
import xlrd
from xlutils.copy import copy
workbook = xlrd.open_workbook('./某公司贸易数据.xlsx')
new_workbook = copy(workbook)#拷贝一份工作簿
ws = new_workbook.get_sheet(0)#获取第一张工作簿
ws.write(3,0,'这是修改的')#根据索引修改对应的单元格数据
new_workbook.save('./rongda.xls')
利用openpyxl操作Excel
#openpyxl对excel文件进行读写操作
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.writer.excel import ExcelWriter
workbook_ = load_workbook("./excel/某公司贸易数据(northwind).xlsx")
sheetnames = workbook_.get_sheet_names() # 获得所有表单名字
print(sheetnames)
sheet = workbook_.get_sheet_by_name()#获取其中一张表单
print(sheet.cell(row=3, column=3).value)
sheet['A1'] = '47'
workbook_.save("./excel/northwind_new.xlsx")
#创建一张表
workbook_ = load_workbook('./某公司贸易数据.xlsx)
sheet1 = workbook_.creat_sheet(index = 7,title = 'now sheet')#index是增加的位置,title是表名
sheet1['A1'] = 'hello'
sheet2['A2'] = 'world'
2.os模块
Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。
常用方法:
1、os.name
输出字符串指示正在使用的平台。如果是window 则用’nt’表示,对于Linux/Unix用户,它是’posix’。
2、os.getcwd()
函数得到当前工作目录,即当前Python脚本工作的目录路径。
3、os.listdir()
返回指定目录下的所有文件和目录名。
4、os.remove()
删除一个文件。
5、os.system()
运行shell命令。
6、os.sep 可以取代操作系统特定的路径分割符。
7、os.linesep字符串给出当前平台使用的行终止符
8、os.path.split()
函数返回一个路径的目录名和文件名
9、os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。
10、os.path.exists()函数用来检验给出的路径是否真的存在
11、os.path.abspath(name):获得绝对路径
12、os.path.normpath(path):规范path字符串形式
13、os.path.getsize(name):获得文件大小,如果name是目录返回0L,如果那么为文件,则返回文件的字节数
14、os.path.splitext():分离文件名与扩展名
15、os.path.join(path,name):连接目录与文件名或目录
16、os.path.basename(path):返回文件名
17、os.path.dirname(path):返回文件路径
3.datetime模块
主要有下面这四个类:
- datetime.date: 是指年月日构成的日期(相当于日历)
- datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)
- datetime.datetime: 上面两个合在一起,既包含时间又包含日期
- datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
1.datetime.date 类
-
新建一个date对象,日期为今天,既可以直接调用datetime.date.today(),也可以直接向datetime.date()传值,如下:
In [1]: today = datetime.date.today()
In [1]: today
Out[1]: datetime.date(2017, 12, 27)In [2]: t = datetime.date(2017,8,15)
In [2]: t
Out[2]: datetime.date(2017, 8, 15) -
datetime.date.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式
In [3]: today.strftime(’%Y-%m-%d %H:%M:%S’)
Out[3]: '2017-12-27 00:00:00’
date对象中小时、分钟、秒默认都是0,纪元年的那个时间
-
datetime.date.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式
In [4]: today.timetuple()
Out[4]: time.struct_time(tm_year=2017, tm_mon=12, tm_mday=27, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=361, tm_isdst=-1)In [5]: time.mktime(today.timetuple())
Out[5]: 1514304000 -
datetime.date.replace(year,month, day) 返回一个替换后的date对象
In [6]: today.replace(year=2013)
Out[6]: datetime.date(2013, 12, 27) -
datetime.date.fromtimestamp(timestamp)将时间戳转化为date对象
In [7]: datetime.date.fromtimestamp(1514304000)
Out[7]: datetime.date(2017, 12, 27)
2.datetime.time 类
-
新建一个time对象
In [8]: t = datetime.date(2017,8,15)
In [8]: t
Out[8]: datetime.time(8, 45, 20) -
datetime.time.(format)格式化输出
In [9]: t.strftime(’%Y-%m-%d %H:%M:%S’)
Out[9]: '1900-01-01 08:45:20’
time对应的年、月、日为1900、01、01,纪元年的那个时间
-
datetime.time.replace([hour[, minute[, second[,microsecond[, tzinfo]]]]]) 返回一个替换后的time对象
In [10]: t.replace(hour=9)
Out[10]: datetime.time(9, 45, 20)
3.datetime.datetime类
其实和date的那些方法差不多了,大概看以下,简单说说
-
新建一个datetime对象,日期为今天,既可以直接调用datetime.datetime.today(),也可以直接向datetime.datetime()传值,如下:
In [11]: d1 = datetime.datetime.today()
In [11]: d1
Out[11]: datetime.datetime(2014, 8, 15, 8, 12, 34,790945)
In [22]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34,790945)
In [22]: d2
Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34,790945) -
datetime.datetime.now([tz]) 当不指定时区时,和datetime.datetime.today()是一样的结果,如下
In [23]: datetime.datetime.now()
Out[23]: datetime.datetime(2014, 8, 15, 8, 14, 50,738672) -
datetime.datetime.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式
In [24]: d1
Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34,790945)
In [25]: d1.strftime(’%Y-%m-%d %H:%M:%S’)
Out[25]: '2014-08-15 08:12:34’ -
datetime.datetime.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式
In [26]: d1
Out[26]: datetime.datetime(2014, 8, 15, 8, 12, 34,790945)In [27]: d1.timetuple()
Out[27]: time.struct_time(tm_year=2014, tm_mon=8,tm_mday=15, tm_hour=8, tm_min=12, tm_sec=34, tm_wday=4, tm_yday=227, tm_isdst=-1)In [28]: time.mktime(d1.timetuple())
Out[28]: 1408061554.0 -
datetime.datetime.replace(year, month, day) 返回一个替换后的date对象
In [29]: d1
Out[29]: datetime.datetime(2014, 8, 15, 8, 12, 34,790945)In [30]: d1.replace(year=2000)
Out[30]: datetime.datetime(2000, 8, 15, 8, 12, 34,790945) -
datetime.datetime.fromtimestamp(timestamp) 将时间戳转化为datetime对象
In [34]: time.time()
Out[34]: 1408061894.081552In [35]: datetime.datetime.fromtimestamp(1408061894)
Out[35]: datetime.datetime(2014, 8, 15, 8, 18, 14)
4.datetime.timedelta类
没啥好说的,主要做时间的加减法用,如下:
-
获取当前日期的明天
In [36]: today = datetime.datetime.today()
In [36]: yesterday = today - datetime.timedelta(days=1)
In [36]: yesterday
Out[36]: datetime.datetime(2014, 8, 14, 15, 8, 25,783471)In [37]: today
Out[37]: datetime.datetime(2014, 8, 15, 15, 8, 25,783471) -
获取某一天的明天、前天
In:import datetime # 提供操作日期和时间的类
In: n=1
In:date = datetime.datetime(2018, 05, 24) + datetime.timedelta(days=n) # 2018-05-24 00:00:00
In:time_format = cur_date.strftime(’%Y%m%d’) # ‘20180524’
Out:‘20180524’
In:str(date)
Out:‘2018-05-24 00:00:00’
4.类和对象
类(Class)是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。是抽象的,不能直接使用。
因此类的主要作用是表示某些特征和行为,在Python中特征被称为属性,行为被称为方法。
对象是类的实例。这里表示 类里可以有多个属性,也可以有多个方法。同时也有自己的字段。类好比制造飞机的图纸,对象好比飞机实例。需要注意的是类中有的属性和方法,在对象中也有,并且不能多也不能少。
类的定义:
class 类名: #大驼峰命名发
def 方法1(self ,参数列表)
pass
def 方法2(self ,参数列表)
pass
类对象的实例化
object=类名(参数)
5.正则表达式
正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
具体操作功能:
1、匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false,也就是说返回值为boolean类型。
2、切割:String split(); ,使用String类中的split方法进行对字符串的分割,其中split方法具有按照一定规则分割字符串的功能
3、替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
4、获取:将字符串中的符合规则的子串取出。 操作步骤:
(1)将正则表达式封装成对象。
(2)让正则对象和要操作的字符串相关联。
(3)关联后,获取正则匹配引擎。
(4)通过引擎对符合规则的子串进行操作,比如取出。
6.re模块
方法/属性 作用
re.match(pattern, string, flags=0) 从字符串的起始位置匹配,如果起始位置匹配不成功的话,match()就返回none
re.search(pattern, string, flags=0) 扫描整个字符串并返回第一个成功的匹配
re.findall(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个列表返回
re.finditer(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个迭代器返回
re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串
函数参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标记为,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
repl:替换的字符串,也可作为一个函数
count:模式匹配后替换的最大次数,默认0表示替换所有匹配
例子1
#!/usr/bin/python3
import re
#替换
phone = '13617002575' #这是我的电话号码'
print('我的电话号码:',re.sub('#.*','',phone)) #去掉注释
print(re.sub('\D','',phone))
#search
ip_addr = re.search('(\d{3}\.){1,3}\d{1,3}\.\d{1,3}',os.popen('ifconfig').read())
print(ip_addr)
#match
>>> a = re.match('\d+','2ewrer666dad3123df45')
>>> print(a.group())
2
获取匹配的函数:
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回包含所有小组字符串的元组,从1到所含的小组
groupdict() 返回以有别名的组的别名为键、以该组截获的子串为值的字典
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配(开始,结束)的位置
7.http请求
python中http请求方法有很多种,下面说常用的三种类型:
1.python自带库----urllib2
python自带库urllib2使用的比较多,简单使用如下:
import urllib2
response = urllib2.urlopen('http://localhost:8080/jenkins/api/json?pretty=true')
print response.read()
简单的get请求:
import urllib2
import urllib
post_data = urllib.urlencode({})
response = urllib2.urlopen('http://localhost:8080/, post_data)
print response.read()
print response.getheaders()
2.、第三方库–requests
发请get请求超级简单:
print requests.get('http://localhost:8080).text
就一句话,再来看看post请求
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
也很简单。
再看看如果要认证:
url = 'http://localhost:8080'
r = requests.post(url, data={}, auth=HTTPBasicAuth('admin', 'admin'))
print r.status_code
print r.headers
print r.reason
https://blog.csdn.net/Qzx9059/article/details/89080953
https://blog.csdn.net/cymy001/article/details/78152195
https://blog.csdn.net/qq_23926575/article/details/76629741
https://blog.csdn.net/ulben/article/details/80337717
https://blog.csdn.net/qq_27171347/article/details/81017817
https://blog.csdn.net/weixin_39541558/article/details/79971971
https://blog.csdn.net/learn_tech/article/details/78909652
https://blog.csdn.net/weixin_44075878/article/details/84978340
https://blog.csdn.net/suwu150/article/details/52227409