1.file
a.打开文件方式(读写两种方式)
b.文件对象的操作方法
c.学习对excel及csv文件进行操作
2.os模块
3.datetime模块
4.类和对象
5.正则表达式
6.re模块
7.http请求
1.file
a.打开文件方式(读写两种方式)
b.文件对象的操作方法
c.学习对excel及csv文件进行操作
f = open("test.txt","r") #打开文件
fr = f.read() #读取文件
print(fr)
with open("F:\\python_scripts\\py\\test.txt ","r") as fr: #以r形式打开文件
for line in fr: #一行一行读取
print(line)
fr.read() #读取所有内容
fr.readline() #读取一行
fr.readlines() #读取所有文件内容,返回一个list
#以上三个命令在大文件时慎用,会把内容读到内存中,占用大内存
fr.seek(0) #当前文件指针位置在0位
fr.writelines(["a","b"]) #把列表写入文件
打开方式分为r、w、a三种方式 ,【+】表示可以同时读写
r 只读,默认模式
w 只写,不可读,若文件不存在则创建,若存在,则删除内容,写入新内容
a 只追加,不可读,若文件不存在则创建,存在则追加新内容
r+ 可读、可写、可追加,若文件不存在,则报错
w+ 可读、可写,若文件存在,内容会被清空,可读新写入的内容
a+ 可读、可写、可追加,若文件存在,则追加新内容,读时默认指针在文件末尾,若需读取整个文件,需把指针归零【f.seek(0)】
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')
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)
2.os模块
#OS模块
#os模块就是对操作系统进行操作,使用该模块必须先导入模块:
import os
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
result = os.getcwd()
print(result)
#chdir()改变当前工作目录
os.chdir('/home/sy')
result = os.getcwd()
print(result)
open('02.txt','w')
#操作时如果书写完整的路径则不需要考虑默认工作目录的问题,按照实际书写路径操作
open('/home/sy/下载/02.txt','w')
#listdir() 获取指定文件夹中所有内容的名称列表
result = os.listdir('/home/sy')
print(result)
#mkdir() 创建文件夹
#os.mkdir('girls')
#os.mkdir('boys',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
#以下内容都是os.path子模块中的内容
#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模块
>>> import datetime
>>> # now()方法,返回当期时间的datetime对象,可通过str得到日期时间信息的字符串
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 8, 9, 0, 59, 3, 487000)
>>> str(datetime_now)
'2018-08-09 00:59:03.487000'
>>> # fromtimestamp()方法,将时间戳转换成datetime对象,并返回
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2018, 8, 9, 1, 2, 51, 546000)
>>> # strptime()方法,将字符串按照指定格式转成datetime对象
>>> datetime.datetime.strptime('2016-09-04', '%Y-%m-%d')
datetime.datetime(2016, 9, 4, 0, 0)
>>> # strftime()方法,将datetime对象转换为指定格式的字符串,并返回
>>> datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
'2018-08-09 01:18:10'
>>> # timedelta对象,可用于日期时间信息的加减操作
>>> timedelta_hour = datetime.timedelta(hours=4)
>>> timedelta_day = datetime.timedelta(days=8)
>>> timedelta_new = timedelta_hour + timedelta_day
>>> timedelta_hour
datetime.timedelta(0, 14400)
>>> timedelta_day
datetime.timedelta(8)
>>> timedelta_new
datetime.timedelta(8, 14400)
>>> datetime.datetime.now()
datetime.datetime(2018, 8, 9, 1, 30, 0, 593000)
>>> datetime_new = datetime.datetime.now() + timedelta_new
>>> datetime_new
datetime.datetime(2018, 8, 17, 5, 30, 1, 70000)
>>> # timetuple()方法,将datetime对象转换成struct_time对象
>>> now_datetime = datetime.datetime.now()
>>> now_datetime.timetuple()
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=9, tm_hour=2, tm_min=5, tm_sec=50, tm_wday=3, tm_yday=221, tm_isdst=-1)
4.类和对象
从同一个类中具体化描述的一个事物被称之为对象,具有相同特性和方法的抽象概念称之为类。类是对象的抽象概念,对象是类的详细实例化
创建一个人类实例:
class Human: #创建类
'''这是人类,被我创建了,哈哈'''
def __init__(self,name,sex,ege): #创建一个构造函数 自动运行 python只能允许一个构造函数必须带一个参数
print(name)
print(sex)
print(age)
name_1 = "姓名"
sex_1 = "男"
age_1 = 24
Man = Human(name_1,sex_1,age_1) #创建一个类的实例
#WoMan = Human()
5.正则表达式****及re模块
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#coding=utf-8
# # 导入re模块
# import re
#
# # 使用match方法进行匹配操作
# result = re.match(正则表达式,要匹配的字符串)
#
# # 如果上一步匹配到数据的话,可以使用group方法来提取数据
# result.group()
# import re
#
# str = '<div class="nam">中国</div>'
# res = re.findall(r'<div class=".*">(.*?)</div>',str)
# print(res)
import re
# 如果hello的首字符小写,那么正则表达式需要小写的h
# ret = re.match("h","hello Python")
# print (ret.group())
# ret = re.match("[hH]","hello Python")
# print(ret.group())
# ret = re.match("[hH]","Hello Python")
# print(ret.group())
# ret = re.match("[0123456789]","7Hello Python")
# print(ret.group())
# ret = re.match("嫦娥\d号","嫦娥1号发射成功")
# print (ret.group())
# 匹配出,一个字符串第一个字母为大小字符,后面都是小写字母并且这些小写字母可有可无
# ret = re.match("[A-Z][a-z]*","Aabcdef")
# s = ret.group()
# print (s)
# 匹配出,变量名是否有效
# ret = re.match("[a-zA-Z_]+[\w_]*","_name_")
# print (ret.group())
import re
# names = ["name1", "_name", "2_name", "__name__"]
#
# for name in names:
# ret = re.match("[a-zA-Z_]+[\w]*",name)
# if ret:
# print("变量名 %s 符合要求" % ret.group())
# else:
# print("变量名 %s 非法" % name)
# 匹配出,0到99之间的数字
# ret = re.match("[1-9]?[0-9]","90")
# print (ret.group())
# 匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
# ret = re.match("[a-zA-Z0-9_]{8}","12a3g45678")
# print(ret.group())
# ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
# print (ret.group())
# 匹配出163的邮箱地址,且@符号之前有4到20位,例如hello@163.com
# ret = re.match("[a-zA-Z0-9]{4,20}@163.com","1581133@163.com")
# print(ret.group())
# E_mail = "hello_world@163.com"
# ret = re.math('[a-zA-Z0-9_]{4,20}@163.com',E_mail)
# print (ret.group())
# ret = re.match("[\w]{4,20}@163\.com", "xiaoWang@163.com")
# print(ret.group())
# 通过$来确定末尾
# ret = re.match("[\w]{4,20}@163\.com$", "xiaoWang@163.com")
# print(ret.group())
# \b 用法 匹配一个单词的边界
# ret = re.match(r".*\bver\b", "ho ver abc").group()
# print(ret)
# \B 匹配非单词边界
# ret = re.match(r".*\Bver\B", "hoverabc").group()
# print(ret)
# 匹配出0-100之间的数字
# ret = re.match("[1-9]?\d","178")
# print (ret.group())
# 添加|
# ret = re.match("[1-9]?\d$|100","80")
# print (ret.group())
# 匹配出163、126、qq邮箱之间的数字
# ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@163.com")
# print(ret.group())
# 练习:
# ret = re.match("([^-]*)-(\d+)","010-12345678")
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))
# 匹配出<html>hh</html>
# ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</html>")
# print(ret.group())
# 匹配出<html><h1>www.itcast.cn</h1></html>
# ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><h1>www.itcast.cn</h1></html>")
# print(ret.group())
# (?P<name>) (?P=name)
# ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
# print(ret.group())
# re模块的高级用法-------search
# 匹配出文章阅读的次数
# ret = re.search(r"\d+", "阅读次数为 9999")
# print(ret.group())
# findall
# 统计出python、c、c++相应文章阅读的次数
# ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
# print (ret)
# sub 将匹配到的数据进行替换
# 需求:将匹配到的阅读次数加1
# 方法1:
# ret = re.sub(r"\d+", '998', "python = 997")
# print (ret)
# 方法2:
# def add(temp):
# strNum = temp.group()
# num = int(strNum) + 1
# return str(num)
# ret = re.sub(r"\d+", add, "python = 997")
# print (ret)
#
# ret = re.sub(r"\d+", add, "python = 99")
# print (ret)
# split 根据匹配进行切割字符串,并返回一个列表
# 需求:切割字符串“info:xiaoZhang 33 shandong”
# ret = re.split(r":| ","info:xiaoZhang 33 shandong")
# print (ret)
#
# 在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
# s="This is a number 234-235-22-423"
# r=re.match(".+(\d+-\d+-\d+-\d+)",s)
# print(r.group(1))
#
# r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
# print(r.group(1))
# 非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。
re.match(r"aa(\d+)","aa2343ddd").group(1)
# '2343'
re.match(r"aa(\d+?)","aa2343ddd").group(1)
# '2'
re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
# '2343'
re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
# '2343'