ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习_day4_模块

2021-04-03 20:31:35  阅读:167  来源: 互联网

标签:sheet python day4 cell 模块 print import os row


1.模块基础

  • 在Python中,*.py就可以称之为1个模块(Module)。调用(import)一个模块后会执行其中的所有代码,相当于把这个模块代码放到本文件。
  • 可以使用如下代码查看解释器引用的路径,我们的module要放在这些路径中:
import sys
print(sys.path)

#可以对该list进行修改,实现跨目录导入
1.以相对路径导入
print(__file__) #打印当前脚本文件路径
print(os.path.dirname(__file__)) #打印去掉最后一级目录的当前脚本文件路径
base_path = os.path.dirname(os.path.dirname(__file__)) #再去掉最后一级
sys.path.append(base_path)
2.以绝对路径导入
sys.path.append('E:\\python\\pythonProject\\day2')
  • 模块导入与调用:
import os #导入os中所有方法,使用如下方法调用:
os.mkdir("test")

from os  import mkdir# 导入某个模块下的某个方法
os.mkdir("test")

from module.xx.xx import xx as rename #导入后1个方法后重命令,当名字太长或者名称冲突时可用,重命名后之前的名称不可用

from module.xx.xx import * #导入一个模块下的所有方法,不建议用
#假设
from os import *
#那么在使用os中方法时,就不能os.mkdir(),而是直接mkdir()。os里面有许多函数,若有和自定义函数重名的则造成混淆,调用混乱。

2.开源模块导入

参考:https://zhuanlan.zhihu.com/p/129651314

3.包(python package)

  • 包的跨层级导入
import sys
print(sys.path)  # 查看环境目录
from XX.XX.XX import XX # 一个.表示向下一级目录
  • 每一个包目录下面都有一个__init__.py,只要调用这个包那么这个模块都会执行,一些初始化的功能可写在这里

4.os常用功能

import os
得到当前工作目录: os.getcwd()
返回指定目录下的所有文件名和目录名:os.listdir()
函数删除1个文件:os.remove()
删除多个目录: os.removedirs(r“c: \python”)
检验给出的路径是否是1个文件: os.path.isfile()
检验给出的路径是否是1个目录: os.path.isdir()
判断是否是绝对路径: os.path.isabs()
检验给出的路径是否真地存在:os.path.exists()
返回1个路径的目录名和文件名:os.path.split() 
   e.g
   os.path.split('/home/swaroop/byte/code/poem.txt') 
   结果:
   ('/home/swaroop/byte/code', 'poem.txt')
分离扩展名: os.path.splitext() 
   e.g os.path.splitext('/usr/local/test.py')
   结果: ('/usr/local/test', '.py')
获取路径名: os.path.dirname()
获得绝对路径: os.path.abspath()
获取文件名: os.path.basename()
运行shell命令: os.system()
读取操作系统环境变量HOME的值:os.getenv("HOME")
返回操作系统所有的环境变量: os.environ
设置系统环境变量,仅程序运行时有效: os.environ.setdefault('HOME','/home/alex')
给出当前平台使用的行终止符:os.linesep Windows'\r\n', Linux and MAC'\n'
指示你正在使用的平台: os.name 对于Windows,它是'nt',对于Linux/Unix,它是'posix'
重命名: os.rename(old, new)
创建多级目录: os.makedirs(r“c: \python\test”)
创建单个目录: os.mkdir(“test”)
获取文件属性: os.stat(file)
修改文件权限与时间戳: os.chmod(file)
获取文件大小: os.path.getsize(filename)
结合目录名与文件名: os.path.join(dir,filename)
改变工作目录到dirname: os.chdir(dirname)
获取当前终端的大小: os.get_terminal_size()
杀死进程: os.kill(10884,signal.SIGKILL)

5.sys常用功能

import
sys.path	#获取环境变量
sys.argv  #获取脚本参数

6.时间处理模块

  • 在Python中,表示时间方式:
  1. 时间戳(timestamp) , 表示的是从1970.1. 1. 00:00:00开始按秒计算的偏移量。例:
    1554864776.161901(2019年某日)
  2. 格式化的时间字符串,如“2020-10-03 17:54”
  3. 元组(struct_time)共九个元素。由于Python的time模块实现主要调C库,所以各个平台可能有所不同,
    mac上: time.struct_time(tm_year=2020, tm_mon=4, tm_mday=10, tm_hour=2,tm_min=53, tm_sec=15, tm_wday=2, tm_yday=100, tm_isdst=0),含义如下:
    在这里插入图片描述
  • time模块常用方法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 时间转换图:
    在这里插入图片描述

  • datetime模块


import datetime

# 1.当前时间的操作
print(datetime.datetime.now())  # 格式化返回当前的datetime⽇期
# 输出:2021-04-03 12:48:47.516200
d = datetime.datetime.now()
print(d.timestamp())  # 返回时间戳
print(d.year)  # 返回当前年

# 2.把1个时间戳转为 datetime 日期类型
print(datetime.date.fromtimestamp(3112221122))

# 3.格式化输出时间
print(datetime.datetime(2017, 10, 1, 12, 53, 11, 821218))
# 输出: 2017-10-01 12:53:11.821218

# 4.时间运算,必须用 datetime.timedelta
print(datetime.datetime.now() + datetime.timedelta(4))  # 当前时间 +4天
print(datetime.datetime.now() + datetime.timedelta(hours=4))  # 当前时间 +4小时

# 5.时间替换(修改)
print(d.replace(year=2999, month=11, day=30))
# 输出:2999-11-30 12:48:47.51620

7. random模块

import random

>>> random.randrange(1,10) #返回1-10之间的1个随机数,不包括10
>>> random.randint(1,10) #返回1-10之间的1个随机数,包括10
>>> random.randrange(0, 100, 2) #随机选取0到100间的偶数
>>> random.random() #返回1个随机浮点数
>>> random.choice('abce3#$@1') #返回1个给定数据集合中的随机字符
'#'
>>> random.sample('abcdefghij',3) #从多个字符中选取特定数量的字符
['a', 'd', 'b']

#随机字符串:
>>> import string
>>> ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
'4fvda1'

#洗牌:
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> random.shuffle(a)
>>> a
[3, 0, 7, 2, 1, 6, 5, 8, 9, 4]

8.Excel处理模块

import openpyxl
from openpyxl.styles import Font, colors, Alignment

# 对Excel操作时候一定要关闭目标文件
import random
import string

# 创建工作簿
wb = openpyxl.Workbook()
sheet = wb.active

# 给工作表命名
sheet.title = "salary"

# 初始化用到的工作区
row_width = 10
col_width = 8
for row in range(1, row_width):
    sheet.append(range(1, col_width))
col_idx = []
for i in range(ord('A'), ord('G') + 1):  # ord:字符转ASCII
    col_idx.append(chr(i))  # 与ord相反
    # print(col_idx)

sheet['A1'] = "姓名"
sheet['B1'] = "邮箱"
sheet['C1'] = "基本工资"
sheet['D1'] = "扣税"
sheet['E1'] = "五险一金扣除"
sheet['F1'] = "奖金"
sheet['G1'] = "实际工资"

for i in range(2, sheet.max_row + 1):
    sheet.cell(row=i, column=1).value = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))

for i in range(2, sheet.max_row + 1):
    sheet.cell(row=i, column=2).value = "rx8477@qq.com"  # 可以是字符串
    # sheet.append() # Value must be a list, tuple, range or generator, or a dict.

for i in range(2, sheet.max_row + 1):  # 基本工资
    sheet.cell(row=i, column=3).value = random.randrange(15000, 20000)
for i in range(2, sheet.max_row + 1):  # 扣税
    sheet.cell(row=i, column=4).value = sheet.cell(row=i, column=3).value * 0.05
for i in range(2, sheet.max_row + 1):  # 扣五险一金
    sheet.cell(row=i, column=5).value = sheet.cell(row=i, column=3).value * 0.15
for i in range(2, sheet.max_row + 1):  # 奖金
    sheet.cell(row=i, column=6).value = random.randrange(2000, 5000, 1000)
for i in range(2, sheet.max_row + 1):  # 实际工资
    sheet.cell(row=i, column=7).value = sheet.cell(row=i, column=3).value + sheet.cell(row=i, column=6).value \
                                        - sheet.cell(row=i, column=4).value - sheet.cell(row=i, column=5).value
# 声明样式
bold_itatic_15_font = Font(name='等线', size=15, italic=False, color=colors.BLUE, bold=True)  # 声明样式
sheet.font = bold_itatic_15_font  # 给单元格设置样式
# 设置B1中的

# 所有⾏⾼、列宽设置.数据垂直居中和⽔平居中
for i in range(1, row_width):
    sheet.row_dimensions[i].height = 20
for i in col_idx:
    sheet.column_dimensions[i].width = 20

# 将所有单元格内容居中
for i in col_idx:
    for j in range(1, row_width):
        idx = f"{i}{j}"
        # print(idx)
        sheet[idx].alignment = Alignment(horizontal='center', vertical='center')

# 遍历 所有数据四舍五入为整数
for row in sheet.iter_rows(min_row=2, max_row=row_width-1, min_col=3, max_col=col_width-1):
    for cell in row:
        # print(cell.value, end="\t")
        cell.value = round(int(cell.value))

# 按行遍历 输出所有内容
# for row in sheet.rows:
#     for cell in row:
#         print(cell.value, end="\t")
#     print()
#
# # 按列遍历 输出所有内容
# for column in sheet.columns:
#     for cell in column:
#         print(cell.value, end=",")
#     print()
#
# # 坐标化 输出第1列内容
# for i in range(1, sheet.max_row + 1):
#     val_in_col1 = sheet.cell(row=i, column=1).value
#     print(val_in_col1)
#
# # 遍历 从第2⾏开始⾄第5⾏,每⾏打印1-5列
# for row in sheet.iter_rows(min_row=2, max_row=5,  min_col=1, max_col=5):
#     for cell in row:
#         print(cell.value, end=",")
#     print()
# # 遍历 打印第2-第5列的数据
# for col in sheet.iter_cols(min_col=2, max_col=5):
#     for cell in col:
#         print(cell.value, end=",")
#     print()

# 保存工作表
wb.save("salaries_list.xlsx")

9.邮件发送

  • 例1:发简单的plain纯文本邮件
import smtplib

from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 发件邮箱中的SMTP服务器,端口是465
# 登陆QQ邮箱后在设置->账户->IMAP/SMTP服务查找
smtp_obj.login("tx779@qq.com", "zvplikgguoznbcfi")  
# 括号中对应的是发件邮箱账号、邮箱密码(exchange的授权码,个人邮箱需要发短信获取)

# smtp_obj.set_debuglevel(1) # 显示调试信息
# 设置邮件信息
msg = MIMEText("~...正文....", "plain", "utf-8") # 正文
msg["From"] = Header("发送者", "utf-8")  # 发送者昵称
msg["To"] = Header("接收者", "utf-8")  # 接收者昵称
msg["Subject"] = Header("主题", "utf-8")  # 主题

# 发送,[]中可以有多个目标邮箱,用“,”分隔开
smtp_obj.sendmail("tx@qq.com", ["rx@qq.com"], msg.as_string())
  • 例2:批量发送工资条,工资条是第8节中Excel实例生成的
import openpyxl

import smtplib

from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 加载Excel
wb = openpyxl.load_workbook("salaries_list.xlsx")
sheet = wb.active

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件邮箱中的SMTP服务器,端口是465 在设置->账户->IMAP/SMTP服务查找
smtp_obj.login("tx779@qq.com", "zvplikgguoznbcfi")  # 括号中对应的是发件邮箱账号、邮箱密码(exchange的授权码,需要发短信获取)

# 循环读取Excel
count = 0
table_col_html = '<thead>' #表头开始
for row in sheet.iter_rows(min_row=1):
    count += 1
    if count == 1:
        for col in row:
            table_col_html += f"<th>{col.value}</th>" # th加粗
        table_col_html += "</thead>" # 表头结束
        continue
    else:
        row_text = "<tr>" #开始一行
        for cell in row:
            row_text += f"<td>{cell.value}</td>"
        row_text += "</tr>" #结束一行
        name = row[0].value
        staff_email = row[1].value
        #print(staff_email,name)

    mail_body_context = f'''
        <h3>{name},你好:</h3>
        <p>请查收工资</p>
        <table border = "ipx solid black">
            {table_col_html}
            {row_text}
        </table>   
    '''
    # 设置邮件头信息
    msg = MIMEText(mail_body_context, "html", "utf-8")  # 正文
    msg["From"] = Header("公司", "utf-8")  # 发送者
    msg["To"] = Header(f"{name}", "utf-8")  # 接收者
    msg["Subject"] = Header("工资", "utf-8")  # 主题
    # 发送
    smtp_obj.sendmail("tx779@qq.com",staff_email, msg.as_string())
    print(f"成功发送{name}的工资条")

print("发送完毕!")

标签:sheet,python,day4,cell,模块,print,import,os,row
来源: https://blog.csdn.net/qq_43445577/article/details/115384709

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有