01-07. 装饰器&偏函数与作用域与异常处理与文件读写06
1 读文件
读文件过程如下:
- 打开文件;
- 读文件内容;
- 关闭文件。
1.1 打开文件
open(path, flag[, encoding][, errors])
- path:要打开文件的路径
flag:打开方式
- r:以只读的方式打开文件,文件的描述符放在文件的开头;
- rb:以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头;
- r+:打开一个文件用于读写,文件的描述符放在文件的开头;
- w:打开一个文件只用于写入,如果该文件已经存在会覆盖,如果不存在则创建新文件;
- wb:打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,如果不存在则创建新文件;
- w+:打开一个文件用于读写;
- a:打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾;
- a+:
- encoding:编码方式;
- errors:错误处理。
path = r"D:\PythonProj\test.txt"#ignore 忽略错误#f = open(path, "r", encoding="utf-8", errors="ignore")f = open(path, "r", encoding="utf-8")
1.2 读文件
读取文件全部内容
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str1 = f.read()print(str1)
读取指定字符数
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str2 = f.read(10)print("*"+str2+"*")
读取整行,包括”\n”字符
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str4 = f.readline()print(str4)str5 = f.readline()print(str5)
读取指定字符数
读取一行中固定字符数,很少用
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str6 = f.readline(10)print(str6)
读取所有行并返回一个列表
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")list7 = f.readlines()print(list7)
若给定的数字大于0,返回实际size字节的行数
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")list8 = f.readlines(25)print(list8)
修改描述符的位置(seek方法)
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str1 = f.read()print(str1)print("********")f.seek(10)str9 = f.read()print(str9)
1.3 关闭文件
path = r"D:\PythonProj\test.txt"f = open(path, "r", encoding="utf-8")str1 = f.read()print(str1)f.close()
1.4 一个完整的过程
path = r"D:\PythonProj\test.txt"try:f1 = open(path, "r", encoding="utf-8")print(f1.read())finally:if f1: #判断是否打开,如果打开失败,就不用关闭了f1.close()#简单方法,不用写closewith open(path, "r", encoding="utf-8") as f2:print(f2.read())
2 写文件
01-08. 装饰器&偏函数与作用域与异常处理与文件读写01
正常写文件是将信息先写入缓冲区,然后刷新缓冲区时再写入文件。flush、close、缓冲区写满和遇到“\n”均会刷新缓冲区。
path = r"D:\PythonProj\test.txt"f = open(path, "w")#1、将信息写入缓冲区f.write("sunck in")#2、刷新缓冲区#直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷新缓冲区写入f.flush()f.close()
使用with可以简写,不用写flush和close。
path = r"C:\Users\xlg\Desktop\Python-1704\day08\1-文件读写\file2.txt"with open(path, "a") as f2:f2.write("good man")
编码
01-08. 装饰器&偏函数与作用域与异常处理与文件读写02
path = r"D:\PythonProj\test.txt"with open(path, "wb") as f1:str = "test凯"f1.write(str.encode("utf-8")) #不编码就会报错with open(path, "rb") as f2:data = f2.read()print(data) #b'test\xe5\x87\xaf'print(type(data)) #<class 'bytes'>newData = data.decode("utf-8")print(newData) #test凯print(type(newData)) #<class 'str'>
3 特殊文件读写
list-tuple-dict-set的文件操作
01-08. 装饰器&偏函数与作用域与异常处理与文件读写03
import pickle #数据持久性模块myList = (1,2,3,4,5,"sunck is a good man")path = r"D:\PythonProj\test.txt"f = open(path, "wb")pickle.dump(myList, f)f.close()#读取f1 = open(path, "rb")tempList= pickle.load(f1)print(tempList)f1.close()
4 os模块
01-08. 装饰器&偏函数与作用域与异常处理与文件读写03
import os#获取操作系统类型 nt->windows posix->Linux、Unix或Mac OS Xprint(os.name)#打印操作系统详细的信息(windows不支持)#print(os.uname())'''posix.uname_result(sysname='Darwin', nodename='sunck.local', release='15.5.0', version='Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64', machine='x86_64')'''#获取操作系统中的所有环境变量#print(os.environ)#获取指定环境变量#print(os.environ.get("APPDATA"))#获取当前目录 ./a/print(os.curdir)#获取当前工作目录,即当前python脚本所在的目录print(os.getcwd())#以列表的形式返回指定目录下的所有的文件print(os.listdir(r"C:\Users\xlg\Desktop\Python-1704\day08"))#在当前目录下创建新目录#os.mkdir(r"C:\Users\xlg\Desktop\Python-1704\day08\kaige")#os.mkdir("sunck")#删除目录#os.rmdir("sunck")#获取文件属性#print(os.stat("sunck"))#重命名#os.rename("sunck", "kaige")#删除普通文件#os.remove("file1.txt")#运行shell命令#os.system("notepad")#os.system("write")#os.system("mspaint")#os.system("msconfig")#os.system("shutdown -s -t 500")#os.system("shutdown -a")#os.system("taskkill /f /im notepad.exe")#有些方法存在os模块里,还有些存在于os.path#查看当前的绝对路径print(os.path.abspath("./kaige"))#拼接路径p1 = "C:\\Users\\xlg\\Desktop\\Python-1704\\day08\\"p2 = r"sunck\abc\d"#注意:参数2里开始不要有斜杠#r"C:\Users\xlg\Desktop\Python-1704\day08\sunck"p3 = "/root/sunck/home"p4 = "kaige"#/root/sunck/home/kaigeprint(os.path.join(p3, p4))#拆分路径path2 = r"C:\Users\xlg\Desktop\Python-1704\day08\2-os模块\kaige.txt"print(os.path.split(path2))#获取扩展名print(os.path.splitext(path2))#判断是否是目录print(os.path.isdir(path2))#判断文件是否存在path3 = r"C:\Users\xlg\Desktop\Python-1704\day08\函数也是一种数据类型.py"print(os.path.isfile(path3))#判断目录是否存在path4 = r"C:\Users\xlg\Desktop\Python-1704\day081"print(os.path.exists(path4))#获得文件大小(字节)print(os.path.getsize(path3))#文件的目录print(os.path.dirname(path3))print(os.path.basename(path3))
5 窗口控制
01-08. 装饰器&偏函数与作用域与异常处理与文件读写05
import win32conimport win32guiimport time#找出窗体的编号#QQWin = win32gui.FindWindow("TXGuiFoundation", "QQ")#隐藏窗体#win32gui.ShowWindow(QQWin, win32con.SW_HIDE)#显示窗体#win32gui.ShowWindow(QQWin, win32con.SW_SHOW)while True:QQWin = win32gui.FindWindow("Chrome_WidgetWin_1", "新标签页 - Google Chrome")win32gui.ShowWindow(QQWin, win32con.SW_HIDE)time.sleep(1)win32gui.ShowWindow(QQWin, win32con.SW_SHOW)time.sleep(1)
01-08. 装饰器&偏函数与作用域与异常处理与文件读写06
import win32conimport win32guiimport timeimport randomQQWin = win32gui.FindWindow("TXGuiFoundation", "QQ")#参数1:控制的窗体#参数2:大致方位,HWND_TOPMOST上方#参数3:位置x#参数4:位置y#参数5:长度#参数6:宽度while True:x = random.randrange(900)y = random.randrange(600)win32gui.SetWindowPos(QQWin,win32con.HWND_TOPMOST,x, y, 300, 300, win32con.SWP_SHOWWINDOW)
6 内存修改
01-08. 装饰器&偏函数与作用域与异常处理与文件读写07
7 作业
01-10. 模块的使用与面向对象思想简介04
import osimport collectionsdef work(path):resPath = r"C:\Users\xlg\Desktop\Python-1704\day10\res"#打开文件with open(path, "r") as f:while True:#laphael1985@163.com----198587lineInfo = f.readline()if len(lineInfo) < 5:break#邮箱的字符串#laphael1985 @ 163.commailStr = lineInfo.split("----")[0]#邮箱类型的目录#C:\Users\xlg\Desktop\Python-1704\day10\res\163#print(mailStr)fileType = mailStr.split("@")[1].split(".")[0]dirStr = os.path.join(resPath,fileType)if not os.path.exists(dirStr):#不存在,创建os.mkdir(dirStr)filePath = os.path.join(dirStr, fileType + ".txt")with open(filePath, "a") as fw:fw.write(mailStr+"\n")def getAllDirQU(path):queue = collections.deque()queue.append(path)while len(queue) != 0:dirPath = queue.popleft()filesList = os.listdir(dirPath)for fileName in filesList:fileAbsPath = os.path.join(dirPath, fileName)if os.path.isdir(fileAbsPath):queue.append(fileAbsPath)else:#处理普通文件work(fileAbsPath)getAllDirQU(r"C:\Users\xlg\Desktop\Python-1704\day10\newdir2")
