DataWhale学习计划(第六期):python基础任务5

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.081552

    In [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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值