# -*- coding: utf-8 -*-
import os
import shutil
if __name__ == "__main__":
os.chdir("d://")
shutil.copy("d://spam.txt", "d://1") # # 复制d://spam.txt到d://1文件夹下
shutil.copy("d://spam.txt", "d://1//1.txt") # 复制d://spam.txt到d://1文件夹下,并重命名为1.txt
shutil.copytree("d://1", "d://2") # 将整个文件夹从d://1复制为d://2
print("end.")
# -*- coding: utf-8 -*-
import os
import shutil
if __name__ == "__main__":
os.chdir("d://")
shutil.move("d://spam.txt", "d://3") # 将d://spam.txt移动到d://3文件夹中,需要保证3文件夹存在
shutil.move("d://spam.txt", "d://3//3.txt") # 将d://spam.txt移动到d://3文件夹中并重命名为3.txt,需要保证3文件夹存在
print("end.")
利用os模块中的函数,可以删除一个文件或一个空文件夹。但利用shutil模块,可以删除一个文件夹及其所有的内容
# -*- coding: utf-8 -*-
import os
import shutil
if __name__ == "__main__":
os.chdir("d://3")
for filename in os.listdir():
print(filename)
os.unlink(filename) # 直接永久删除这些文件
print("end.")
# -*- coding: utf-8 -*-
import os
import shutil
if __name__ == "__main__":
# os.chdir("d://3")
os.rmdir("d://2") # 当目录不为空的时候不能删除
print("end.")
# -*- coding: utf-8 -*-
import os
import shutil
if __name__ == "__main__":
# os.chdir("d://3")
shutil.rmtree("d://2") # 直接删除整个目录及其下面的子文件夹
print("end.")
上面三个函数都是直接永久删除文件夹,这个函数则是放到回收站中
# -*- coding: utf-8 -*-
import os
import send2trash
if __name__ == "__main__":
os.chdir("d://1")
for filename in os.listdir():
send2trash.send2trash(filename) # 只能是挨个放入回收站
print("end.")
假如希望对某个文件夹中的所有文件进行操作,包括该文件夹中所有子文件夹中的所有文件。那么可以使用os.walk函数
# -*- coding: utf-8 -*-
import os
import send2trash
if __name__ == "__main__":
os.walk("d://1")
for folderName, subfolders, filenames in os.walk("d://1"):
print("The current folder is " + folderName)
for subfolder in subfolders:
print("Subfolder of " + folderName + ": " + subfolder)
for filename in filenames:
print("file inside " + folderName + ": " + filename)
print("end.")
输出如下图:
使用163邮箱发送,设置和代码请参考:python使用163邮箱发送邮件
使用qq邮箱发送,设置和代码请参考:Python3 SMTP发送邮件
使用模块下的move函数完成该功能
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
# duration指定了将鼠标移动到目标位置所需的秒数
pyautogui.moveTo(1000, 1000, duration=0.25)
pyautogui.click() # 完成点击事件,配合Windows画图工具可以看成所按下的点
print("end.")
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
print('Press Ctrl-C to quit.')
try:
while True:
# Get and print the mouse coordinates.
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
print('\nDone.')
print("end.")
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
print('Press Ctrl-C to quit.')
try:
while True:
# Get and print the mouse coordinates.
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
pixelColor = pyautogui.screenshot().getpixel((x, y))
positionStr += ' RGB: (' + str(pixelColor[0]).rjust(3)
positionStr += ', ' + str(pixelColor[1]).rjust(3)
positionStr += ', ' + str(pixelColor[2]).rjust(3) + ')'
print(positionStr, end=##'')
print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
print('\nDone.')
print("end.")
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
im1 = pyautogui.screenshot() # 截图后保存到内存中
im2 = pyautogui.screenshot("output.png") # 截图后保存到文件中
im3 = pyautogui.screenshot("output2.png", region=(0, 0, 300, 400)) # 只截图区域
# 得到某个点的像素值
print(im1.getpixel((0, 0)))
print(im1.getpixel((50, 200)))
print("end.")
通过分析屏幕快照,可以知道当前所点击的位置是否是同一个,比如被弹出的广告挡住了,那么再继续点击是无效的
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
im1 = pyautogui.screenshot() # 截图后保存到内存中
# 得到某个点的像素值
print(im1.getpixel((50, 200))) # 事先知道当前的颜色为(51, 51, 51)
if pyautogui.pixelMatchesColor(50, 200, ((51, 51, 51))):
print("True.")
else:
print("False")
print("end.")
输出如下信息
如果实现不知道点击哪里,则可以使用图像识别来帮助判断,但此方法局限就在于,如果出现一个像素的偏差,那么该函数也会返回None
# -*- coding: utf-8 -*-
import pyautogui
if __name__ == "__main__":
if pyautogui.locateAllOnScreen("screenshot.png"):
print("True.")
else:
print("False.")
print("end.")
示例代码中的screenshot.png为我截取屏幕的一小块区域
# -*- coding: utf-8 -*-
import logging
# basicConfig用来设置日志的信息,最好把此行代码放在最上面,方便以后做统一修改
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
if __name__ == "__main__":
logging.debug("Start of program.")
使用logging来输出factorial的中间信息
# -*- coding: utf-8 -*-
import logging
# basicConfig用来设置日志的信息,最好把此行代码放在最上面,方便以后做统一修改
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def factorial(n):
logging.debug('Start of factorial(%s%%)' % (n))
total = 1
for i in range(1, n + 1):
total *= i
logging.debug('i is ' + str(i) + ', total is ' + str(total))
logging.debug('End of factorial(%s%%)' % (n))
return total
if __name__ == "__main__":
factorial(5)
logging.debug('End of program')
输出如下
使用printf进行输出,在调试完成后,需要花很多时间,从代码中清楚每条printf调用
日志消息是给程序员看的,不是给用户的。用户不会因为你便于调试,而想看到的字典值的内容。请将日志信息用于类似这样的目的。对于用户希望看到的消息,例如“文件未找到”或者“请输入一个数字”,才应该使用printf
这时候,如果需要显示低于WARNING级别的内容,可以引入NOTSET级别来显示:
import logging # 引入logging模块
logging.basicConfig(level=logging.NOTSET, format='%(asctime)s - %(levelname)s - %(message)s') # 设置日志级别
logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
当设定的级别是INFO,则不会显示出debug的日志
# -*- coding: utf-8 -*-
import logging
# basicConfig用来设置日志的信息,最好把此行代码放在最上面,方便以后做统一修改
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # 设置日志级别
if __name__ == "__main__":
logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
在调试完成后,如果不希望这些日志出现在屏幕上。可以使用disable进行用着消息
# -*- coding: utf-8 -*-
import logging
# basicConfig用来设置日志的信息,最好把此行代码放在最上面,方便以后做统一修改
logging.basicConfig(level=logging.NOTSET, format='%(asctime)s - %(levelname)s - %(message)s') # 设置日志级别
if __name__ == "__main__":
logging.disable(logging.DEBUG)
logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
除了将日志消息显示在屏幕上,还可以将他们写入文本文件
# -*- coding: utf-8 -*-
import logging
# basicConfig用来设置日志的信息,最好把此行代码放在最上面,方便以后做统一修改
logging.basicConfig(filename="log.txt", level=logging.NOTSET, format='%(asctime)s - %(levelname)s - %(message)s') # 设置日志级别
if __name__ == "__main__":
logging.debug(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")