python自动化--语言基础四模块、文件读写、异常
模块
1、什么是模块?
可以理解为一个py文件其实就是一个模块。比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可
2、模块首先从当前目录查询,如果没有再按path顺序逐一查询(sys.path)
3、一个模块只会被导入一次。
模块的导入方式:
import sys 导入模块 from sys import path from语句从模块中导入一个指定的部分(提倡的写法)
from time import time ,localtime 导入time模块中的两个函数 from …… import * 把一个模块的所有内容全都导入(建议不要用这种) from py文件名 import 类名 (适合同级目录引用) from 文件名 import py文件名 (跨目录) import sys 相对路径:sys.path.append("..\\src\\function") 绝对路径:sys.path.append("c:\\love\\pythonauto")
1 import os 2 print("当前文件路径是:",os.path.abspath(__file__)) 3 4 import sys 5 print("打印sys模块有哪些方法:",dir(sys))
模块的应用示例:
1 import random 2 import os,shutil #文件的高级操作 3 import glob 4 5 print(random.choice('abcdefggh')) #随机取一个字母 6 print(random.choice(["apple","beer","banana"])) #随机取一个注意括号!!! 7 8 print(os.getcwd()) #获取当前的工作目录 9 os.rename('a','b') #重命名文件a为b 10 os.remove(a) #删除文件a 11 os.mkdir("test") #在当前目录下创建一个新目录test 12 os.chdir("c:/aa") #将当前目录改为c:/aa 13 os.rmdir("c:/aa") #删除这个目录 14 os.system("mkdir today") #执行系统命令创建一个today的文件夹 15 shutil.copyfile("源文件","目标文件") #拷贝 16 shutil.move("源文件","目标文件") #移动 17 18 根据通配符进行搜索 19 print(glob.glob("*.py")) 20 print(glob.glob("c:/*.txt"))
文件读写
一般步骤为:
python内置的open()函数打开一个文件,并创建一个file对象,然后调用相关方法进行操作。
wb方式是在linux下操作文件时用到的,在Windows下用w
语法:
file_object = open(file_name[,access_mode][,encoding=None])
access_mode决定了打开文件的模式:只读,写入,追加等。这个参数是非强制的,默认文件访问模式为只读r
# 文件路径的三种解决方式:
# 1、r"d:\test.txt";
# 2、"d:\\test.txt";
# 3、d:/test.txt;
1 doc = "D:/pycharm workspace/practice/day.txt" 2 3 f = open(doc,"w") 4 print("文件名是",f.name) 5 print("打开方式",f.mode) 6 f.close() #关闭文件 7 print("是否关闭文件",f.closed) 8 9 fo = open(doc,"w") #以w方式打开文件 10 fo.write("abcdefgh") #写入文件内容 11 fo.close() #关闭文件
tell seek的用法
1、tell()方法告诉你文件内的当前位置
2、seek(offset[,where])方法改变当前的位置
offset变量表示要移动的位数。where变量指定开始移动的参考位置。
where为0表示文件开始处,这是默认值;1表示当前位置;2表示文件结尾
1 fp = open(doc,"r+") #r+可读可写;r是只读 2 str = fp.read() #读取文件中的内容 3 print(str) #打印读取的内容 4 #查找当前位置 5 position = fp.tell() 6 print("当前位置",position) 7 #把指针再次重新定位到文件开头 8 position = fp.seek(0,0) 9 str = fp.read(2) #读取文件中的两个字符 10 print("文件中的内容为",str) 11 #关闭打开的文件 12 fp.close()
with open("1.txt", "r",encoding='utf-8') as f:
print(f.readline()) #读取一行
print(f.readlines()) #读取全部并以列表的形式返回
print(f.read()) #读取全部
异常
捕获异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理
如果不想在异常发生时结束程序,只需要在try里捕获它。
第一种:
1 try: 2 fh = open("d:\log.txt","r") 3 fh.write("haha") 4 except Exception as e: 5 print("错误!无法读取文件",str(e)) 6 else: #try没有异常的时候才会执行else 7 print("successfully") 8 fh.close()
第二种:
1 try: 2 fh = open("d:\log.txt","r") 3 fh.write("haha") 4 except BaseException as e: 5 print("错误!无法读取文件",str(e)) 6 finally: #无论如何都执行。用于文件关闭和释放数据库连接等 7 print("successfully")
第三种:
1 # try内的语句块有问题报异常,没有问题走else。最后执行finally下语句块 2 try: 3 fh = open("1.txt","w") 4 fh.write("haha") 5 except Exception as e: 6 print("错误!无法读取文件",str(e)) 7 else: 8 print("写入successfully") 9 fh.close() 10 finally: 11 print("finally")
Exception和BaseException可以捕获基本上所有的异常
练习:
1 #write 2 doc = "D:/pycharm workspace/practice/day.txt" 3 filewirte = open(doc,"w") 4 filewirte.write("poiuytrewq") 5 filewirte.close() 6 7 #writelines 8 filewirte1 = open(doc,"r+") 9 filewirte1.writelines(["daydayup\n","lreanlreanstart"]) 10 filewirte1.close() 11 12 #在不关闭文件的情况下读取文件的内容 13 filewirte1 = open('a.txt',"r+") 14 filewirte1.write("lreanlreanstart") 15 16 filewirte1.seek(0,0) #把光标定位到开始,读取全部文件内容 17 str = filewirte1.read() 18 print(str) 19 20 # s = filewirte1.seek(0,2) #把光标定位到文件末尾打印有多少字符 21 # print(s) 22 23 filewirte1.seek(0,0) 24 # filewirte1.truncate() #删除时需先定位到开头位置,删除的是全部 25 filewirte1.truncate(2) #删除时需先定位到开头位置,保留前两位字符 26 27 filewirte1.close()
# 号外!!!
string = "abcde"
print(string[0:5:1]) #打印下标从0到4的字符,步长为正向 1
# 思路:
#len(string1)-1是取字符串的最后一位,返回取值步长为-1
#中间一位-1其实只取值到0,达到字符串的反转
1 def dao(string): 2 tr = '' 3 for i in range(len(string1)-1, -1, -1): 4 print(i) 5 tr += string1[i] 6 return tr 7 string1 = "qwert" 8 print(dao(string1))
#字符串的反转另外一种方式:
1 def reverse_str(string): 2 return string[::-1] 3 string = "abcd" 4 print(reverse_str(string))
is与==的区别:
a = 1
b = 1.0
print(a is b) #比较id内存地址
print(a == b) #比较值