注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
我爱下载的个人空间 https://home.eeworld.com.cn/space-uid-101026.html [收藏] [复制] [分享] [RSS]
日志

《Python编程快速上手 让繁琐工作自动化 第2版》第二部分自动化任务8-20章

已有 642 次阅读2024-5-16 09:38 |个人分类:产品评测

Python编程快速上手 让繁琐工作自动化 2版》第二部分自动化任务
——第8章到第20章读后感
本书中第二部分自动化任务是基于第一部分基础知识的高级应用介绍,也是本书的重点。本部分主要包含正则表达式,输入验证,文件处理(基本文件读写,excel电子表文件操作,Google电子表格操作,CSV文件操作,JSON数据处理,PDF文件操作,word文件操作),电子邮件的收发,图形图像处理等。
这一部分介绍的内容比较详细,从实践项目的角度触发,介绍各个模块中包含的方法的含义,使用方法,并且对比了相似方法的应用对象和应用范围。下面从第8章开始的思维导图。
图1 第8章~第12章思维导图
图2 第13章~第17章思维导图
图3 第18章~第20章思维导图。
第8章习题
1.PyInputPlus是否随Python标准库一起提供?
答:
PyInputPlus不是Python自带的标准库,需要通过pip来安装。
2.为什么通常利用import pyinputplus as pyip导入PyInputPlus?
答:
可以使代码输入更加简洁。
3.inputInt()和inputFloat()有什么区别?
答:
InputInt()方法返回整型数;inputFloat()方法返回浮点数。
4.如何利用PyInputPlus确保用户输入0到99之间的整数?
答:
PyInputPlus.inputint(min=0, max=99)
5.什么被传入allowRegexes和blockRegexes关键字参数?
答:
显示允许或拒绝的 regex 字符串列表.
6.如果输入3次空白,inputStr(limit=3)会做什么?
答:
抛出RetryLimitException异常。
7.如果输入了3次空白,inputStr(limit=3, default='hello')会做什么?
答:
返回’hello’字符串。
第9章习题
1.相对路径是相对于什么?
答:
相对路径是相对于当前工作目录。
2.绝对路径从什么开始?
答:
从根文件夹开始,例如C:\
3.在Windows操作系统上,Path('C:/ Users')/'Al'的求值结果是什么?
答:
在windows上其结果为'C:/Users/Al'。
4.在Windows操作系统上,'C:/Users' / 'Al'的求值结果是什么?
答:
会出错。
5.os.getcwd()和os.chdir()函数做什么事?
答:
os.getcwd()函数返回当前工作目录。os.chdir()函数改变当前工作目录。
6..和..文件夹是什么?
答:
. 文件夹是当前文件夹,.. 文件夹是当前文件夹的父文件夹。
7.在C:\bacon\eggs\spam.txt中,哪一部分是目录名称,哪一部分是基本名称?
答:
C:\bacon\eggs\为目录名称,spam.txt为基本名称。
8.可以传递给open()函数的3种“模式”参数是什么?
答:
参数'r'对应读模式,'w'对应写模式,'a'对应添加模式
9.如果已有的文件以写模式打开,会发生什么?
答:
文件内容会删除并覆盖。
10.read()和readlines()方法之间的区别是什么?
答:
read()将文件中内容全部当作字符串读出,readlines()将当前文件内容按行返回字符串列表。
11.shelf值与什么数据结构相似?
答:
shelf与字典类型类似,具有键和值。
第10章习题
  1. shutil.copy()和shutil.copytree()之间的区别是什么?
    答:
    shutil.copy()函数将复制一个文件,而 shutil.copytree()将复制整个文件夹以及它的所有内容。
  2. 什么函数用于文件重命名?
    答:
    shutil.move()函数用于重命名文件以及文件移动。
  3. send2trash和shutil模块中的删除函数之间的区别是什么?
答:
send2trash 模块中的删除函数将一个文件或文件夹移到回收站,而 shutil 模块中的 删除函数将永久地删除文件和文件夹。
4.ZipFile对象有一个close()方法,就像File对象的close()方法。ZipFile对 象的什么方法等价于File对象的open()方法?
答:
Zipfile.ZipFile()函数等价于 open()函数,第一个参数是文件名,第二个参数是打开 ZIP 文件的模式(读、写或添加)。
11章习题
  1. 写一条assert语句,如果变量spam是一个小于 10 的整数,就触发 AssertionError。
    答:
    assert spam >= 10,'spam is less than 10'。
  2. 写一条assert语句,如果eggs和bacon包含的字符串相同(不区分大小写),就触发AssertionError(也就是说,'hello'和'hello'被认为相同,'goodbye'和'GOODbye'也被认为相同)。
    答:
    assert eggs.upper() != bacon.upper(), 'The eggs and bacon are the same!'。
  3. 编写一条assert语句,使其总是触发AssertionError。
    答:
    assert false,‘this always act’。
  4. 为了能调用logging.debug(),程序中必须加入哪两行代码?
    答:
    import logging
    logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
  5. 为了让logging.debug()将日志消息发送到名为programLog.txt的文件中,程 序必须加入哪两行代码?
    答:
    import logging
    logging.basicConfig(filename='programLog.txt', level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
  6. 5个日志级别是什么?
    答:
    日志级别分别为:DEBUG、INFO、WARNING、ERROR 和 CRITICAL
  7. 你可以加入哪一行代码来禁用程序中所有的日志消息?
    答:
    logging.disable (logging.CRITICAL)
  8. 显示同样的消息,为什么使用日志消息比使用print()要好?
    答:
    程序设计中不需要删除日志信息,只需要禁用就可以,软件设计工作量减少。
  9. 调试控制窗口中的Step Over、Step In和Step Out按钮有什么区别?
    答:
    Step over执行函数;step in进入函数;step out快速执行后续代码直到跳出当前函数。
  10. 单击Continue按钮后,调试器何时会停下来?
    答:
    继续运行程序,直到断电或程序结束。
  11. 什么是断点?
    答:
    告诉调试系统在断点当前行暂停运行。
  12. 在Mu中,如何在一行代码上设置断点?
答:
单击行号。
 
12章习题
  1. 简单描述webbrowser、requests、BeautifulSoup和selenium模块之间的不同。
    答:
    webbrowser 模块有一个 open()方法,它启动 Web 浏览器,打开指定的 URL。requests 模块可以从网上下载文件和页面。BeautifulSoup 模块解析 HTML。selenium 模块可以启动 并控制浏览器。
  2. requests.get()返回哪种类型的对象?如何以字符串的方式访问下载的内容?
    答:
    requests.get()函数返回一个 Response 对象,它有一个 text 属性,包含下载内容的字符串。
  3. 哪个requests方法用于检查下载是否成功?
    答:
    如果下载有问题,raise_for_status()方法将抛出异常;如果下载成功,什么也不做。
  4. 如何取得requests响应的HTTP状态码?
    答:
    Response 对象的 status_code 属性包含了 HTTP 状态码。
  5. 如何将requests响应保存到文件?
    答:
    以“二进制写”模式在你的计算机上打开新文件后,利用一个 for 循环迭代遍历 Response 对象的 iter_content()方法,将各段写入该文件。
  6. 打开浏览器的开发者工具的快捷键是什么?
    答:
    F12
  7. 在开发者工具中,如何查看页面上特定元素的HTML?
    答:
    从菜单中选择 Inspect Element
  8. 要找到id属性为main的元素,CSS选择器的字符串是什么?
    答:
    '#main'
  9. 要找到CSS类为highlight的元素,CSS选择器的字符串是什么?
    答:
    '.highlight'
  10. 要找到一个元素中所有的元素,CSS 选择器的字符串是什么?
    答:
    'div div'
  11. 要找到一个元素,且它的value属性被设置为favorite,CSS选择器 的字符串是什么?
    答:
    'button[value="favorite"]'
  12. 假定你有一个Beautiful Soup的Tag对象保存在变量spam中,针对的元素是Hello, world!。如何从这个Tag对象中取得字符串'Hello world!'?
    答:
    spam.getText()
  13. 如何将一个 Beautiful Soup的Tag对象的所有属性保存到变量linkElem中?
    答:
    linkElem.attrs
  14. 运行import selenium没有效果。如何正确地导入selenium模块?
    答:
    from selenium import webdriver
  15. find_element_*和find_elements_*方法之间的区别是什么?
    答:
    find_element_*方法将第一个匹配的元素返回,作为一个 WebElement 对象。 find_elements_*方法返回所有匹配的元素,作为一个 WebElement 对象列表。
  16. selenium的WebElement对象有哪些方法来模拟鼠标单击和键盘按键?
    答:
    click()和 send_keys()
  17. 你可以在Submit按钮的WebElement对象上调用send_keys(Keys.表达式ENTER),但利用selenium还有什么更容易的方法提交表单?
    答:
    调用 submit()方法将提交该表单
  18. 利用selenium如何模拟单击浏览器的“前进”“返回”和“刷新”按钮?
答:
forward()、back()和 refresh()等 WebDriver 对象方法
13章习题
对于以下的问题,设想你有一个Workbook对象保存在变量wb中,一个Worksheet对 象保存在sheet中,一个Cell对象保存在cell中,一个Comment对象保存在comm中,一 个Image对象保存在img中。
  1. openpyxl.load_workbook()函数返回什么?
    答:
    openpyxl.load_workbook()函数返回一个 Workbook 对象
  2. 工作簿属性wb.sheetnames返回什么?
    答:
    sheetnames 属性返回一个 Worksheet 对象
  3. 如何取得名为'Sheet1'的工作表的Worksheet对象?
    答:
    wb['Sheet1']
  4. 如何取得工作簿的活动工作表的Worksheet对象?
    答:
    wb.active
  5. 如何取得单元格C5中的值?
    答:
    sheet.cell(row=5,column=3).value
  6. 如何将单元格C5中的值设置为"Hello"?
    答:
    sheet.cell(row=5,column=3).value="Hello"
  7. 如何取得表示单元格的行和列的整数?
    答:
    cell.row
    cell.column
  8. 工作表属性sheet.max_column和sheet.max_row返回什么?这些属性的类型是 什么?
    答:
    返回表格最大列数和最大行数的整数值,是整型数。
  9. 如果要取得列'M'的整数索引,需要调用什么函数?
    答:
    openpyxl.cell.column_index_from_string('M')
  10. 如果要取得列14的字符串名称,需要调用什么函数?
    答:
    openpyxl.cell.get_column_letter(14)
  11. 如何取得从A1到F1的所有Cell对象的元组?
    答:
    sheet['A1':'F1']
  12. 如何将工作簿文件名保存为example.xlsx?
    答:
    wb.save('example.xlsx')
  13. 如何在一个单元格中设置公式?
    答:
    公式的设置和值一样,需要以“=”的公式字符串。
  14. 如果需要取得单元格中公式的结果,而不是公式本身,必须先做什么?
    答:
    使用load_workbook() 时,将data_only 关键字设置为 True 。
  15. 如何将第5行的高度设置为100?
    答:
    sheet.row_dimensions[5].height = 100
  16. 如何设置列C的宽度?
    答:
    使用sheet.column_dimensions['C'].width 设置列宽。
  17. 什么是冻结窗格?
    答:
    使用sheet.freeze_panes 方法冻结窗格
  18. 创建一个条形图,需要调用哪5个函数和方法?
答:
openpyxl.charts.Reference() 、 openpyxl.charts.Series() 、 openpyxl.charts. BarChart()、chartObj.append(seriesObj)和add_chart()
15章习题
  1. 不能将PDF文档名的字符串传递给PyPDF2.PdfFileReader()函数。应该向该函数传递什么?
    答:
    传递 open()返回的 File 对象
  2. PdfFileReader()和PdfFileWriter()需要的File对象,应该以何种模式打开?
    答:
    对 PdfFileReader()用读二进制('rb'),对 PdfFileWriter()用写二进制('wb')
  3. 如何从PdfFileReader对象中取得第5页的Page对象?
    答:
    getPage(4)
  4. PdfFileReader的什么属性保存了PDF文档的页数?
    答:
    PdfFileReader 对象中的numPages 变量
  5. 如果PdfFileReader对象表示的PDF文档是用口令swordfish加密的,应该先做 什么才能从中取得Page对象?
    答:
    decrypt('swordfish')
  6. 使用什么方法来旋转页面?
    答:
    rotateClockwise()和 rotateCounterClockwise()方法。旋转度数作为整数参数传入
  7. 什么方法返回文档demo.docx的Document对象?
    答:
    docx.Document('demo.docx')
  8. Paragraph对象和Run对象之间的区别是什么?
    答:
    每个word文档都包含一个Paragraph对象列表表示段落,每个Paragraph对象都包含一个Run对象列表,Run对象是是相同样式文本的延续。
  9. doc变量保存了一个Document对象,如何从中得到Paragraph对象的列表?
    答:
    doc.paragraphs
  10. 哪种类型的对象具有bold、underline、italic、strike和outline属性?
    答:
    Run 对象有这些属性
  11. bold属性值设置为True、False或None,有什么区别?
    答:
    True 总是让 Run 对象成为粗体,False 总是让它不是粗体。None 让 Run 对象使用该样式的粗体设置
  12. 如何为一个新Word文档创建Document对象?
    答:
    docx.Document()
  13. doc变量保存了一个Document对象,如何添加一个文本是'Hello there!'的段落?
    答:
    doc.add_paragraph('Hello there!')
  14. 哪些整数表示Word文档中可用的标题级别?
答:
整数 0、1、2、3 和 4
16章习题
  1. 哪些功能Excel电子表格有,而CSV电子表格没有?
    答:
    在 Excel 中,电子表格的值可以是字符串以外的数据类型,单元格可以有不同的字体、 大小或颜色设置,单元格可以有不同的宽度和高度,相邻的单元格可以合并,可以嵌入图像和图表。而CSV仅为字符串。
  2. 向csv.reader()和csv.writer()传入什么来创建reader和writer对象?
    答:
    通过open()方法获取的File对象。
  3. 对于reader和writer对象,File对象需要以什么模式打开?
    答:
    对于 reader 对象,File 对象需要以读二进制模式('rb')打开;对于 writer 对象,需要以写二进制模式('wb')打开。
  4. 什么方法接收一个列表参数,并将其写入CSV文件?
    答:
    writerow()
  5. delimiter和lineterminator关键字参数有什么用?
    答:
    delimiter 参数改变了分隔行中单元格所用的字符串。lineterminator 参数改变了分隔行的字符串
  6. 什么函数接收一个JSON数据的字符串,并返回一个Python数据结构?
答:
json.loads()
7.什么函数接收一个Python数据结构,并返回一个JSON数据的字符串?
答:
json.dumps()
17章习题
  1. 什么是UNIX纪元?
    答:
    “UNIX纪元”是编程中经常参考的时间:1970年1月1日0点,即协调世界时(UTC)。
  2. 什么函数返回自UNIX纪元以来的秒数?
    答:
    time.time()
  3. 如何让程序刚好暂停5秒?
    答:
    time.sleep(5)
  4. round()函数返回什么?
    答:
    返回与传入参数四舍五入的整数。
  5. datetime对象和timedelta对象之间的区别是什么?
    答:
    datetime 对象表示一个特定的时刻。timedelta 对象表示一段时间
  6. 利用datetime模块,弄清楚2019年1月7日是星期几。
    答:
    datetime.datetime(2019,1,7).weekday()
  7. 假设你有一个函数名为spam(),如何在一个独立的线程中调用该函数并运行其中 的代码?
    答:
    threadObj = threading.Thread(target=spam)threadObj.start()
  8. 为了避免多线程的并发问题,应该怎样做?
答:
线程间不使用相同的全局变量。
18章习题
  1. 发送电子邮件的协议是什么?检查和接收电子邮件的协议是什么?
    答:
    发送电子邮件使用SMTP协议,接收电子邮件使用IMAP协议
  2. 必须调用哪4个smtplib函数/方法,才能登录到SMTP服务器?
    答:
    smtplib.SMTP()、smtpObj.ehlo()、smptObj.starttls()和 smtpObj. login()
  3. 必须调用哪两个imapclient函数/方法,才能登录到IMAP服务器?
    答:
    imapclient.IMAPClient()和 imapObj.login()。
  4. 应传递给imapObj.search()什么样的参数?
    答:
    传入IMAP搜索关键词字符串
  5. 如果你的代码收到了错误信息got more than 10000 bytes,你该怎么做?
    答:
    将变量 imaplib._MAXLINE 赋值为一个大整数
  6. imapclient模块负责连接到IMAP服务器和查找电子邮件。什么模块负责读取 imapclient收集的电子邮件?
    答:
    pyzmail 模块读负责取下载的邮件
  7. 在使用Gmail API时,credentials.json和token.json文件是什么?
    答:
    credentials.json 和 token.json 文件告诉 ezgmail 模块在访问 Gmail 时要使用哪个 Google 账户。
  8. 在Gmail API中,thread和message对象有什么区别?
    答:
    message代表一个消息,thread代表一个邮件
  9. 利用ezgmail.search(),如何找到有文件附件的邮件?
    答:
    在你传递给 search()的字符串中包含'has:atttachment'文本
  10. 在发送短信之前,你需要从Twilio得到哪3种信息?
答:
你需要 Twilio 账户的 SID 号、认证标识号,以及你的 Twilio 电话号码
19章习题
  1. 什么是RGBA值?
    答:
    RGBA 值是 4 个整数的元组,每个整数的范围是 0 至 255。
  2. 如何利用pillow模块得到'CornflowerBlue'的RGBA值?
    答:
    ImageColor.getcolor('CornflowerBlue', 'RGBA')
  3. 什么是矩形元组?
    答:
    矩形元组是 4 个整数的元组:分别是左边的 x 坐标,顶边的 y 坐标,宽度和高度。
  4. 哪个函数针对名为zophie.png的图像文件返回一个Image对象?
    答:
    Image.open('zophie.png')
  5. 如何得到一个Image对象的图像的宽度和高度?
    答:
    imageObj.size
  6. 调用什么方法会得到一个100像素×100像素的图像的Image对象,但不包括它左下 角的1/4?
    答:
    imageObj.crop((0, 50, 50, 50))
  7. 将Image对象修改后,如何将它保存为图像文件?
    答:
    imageObj.save('new_filename.png')
  8. 什么模块包含pillow的形状绘制代码?
    答:
    ImageDraw 模块
  9. Image对象没有绘制方法。哪种对象有?如何获得这种类型的对象?
答:
ImageDraw 对象,可以提供point(),line(),rectangle()
20章习题
  1. 如何触发PyAutoGUI的失效保护来停止程序?
    答:
    将鼠标指针移到屏幕的左上角,即坐标(0,0)处
  2. 什么函数返回当前的分辨率?
    答:
    pyautogui.size()
  3. 什么函数返回鼠标指针当前位置的坐标?
    答:
    pyautogui.position()
  4. pyautogui.moveTo()和pyautogui.move()函数之间的区别是什么?
    答:
    moveTo()函数将鼠标指针移到屏幕的绝对坐标处,而 move()函数相对于鼠标指针的当 前位置来移动鼠标指针。
  5. 什么函数用于拖放鼠标指针?
    答:
    pyautogui.dragTo()和 pyautogui.drag()。
  6. 调用什么函数将替你输入字符串"Hello, world!"?
    答:
    pyautogui.typewrite('Hello, world!')。
  7. 如何模拟按向左键这样的特殊键?
    答:
    pyautogui.typewrite()输入按键字符串的列表或单个按键单个字符串。
  8. 如何将当前屏幕的内容保存为图形文件并命名为screenshot.png?
    答:
    pyautogui.screenshot('screenshot.png')
  9. 什么代码能够设置每次PyAutoGUI函数调用后暂停两秒?
    答:
    pyautogui.PAUSE = 2
  10. 如果你想在网页浏览器内自动单击和按键,应该使用PyAutoGUI还是Selenium?
    答:
    使用 Selenium 来控制一个 Web 浏览器
  11. 是什么让PyAutoGUI容易出错?
    答:
    PyAutoGUI 会盲目地点击和输入
  12. 如何在屏幕上找到每一个标题中包含文本Notepad的窗口的大小?
    答:
    yautogui.getWindowsWithTitle('Notepad')
  13. 如何使Firefox浏览器成为活动窗口,显示在屏幕上的其他每一个窗口前面?
         答:
             w = pyatuogui.getWindowsWithTitle('Firefox'),然后运行 w.activate()

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章