文件处理_配置文件excel_文件下载
文件读取及判断
主要按照分类标准来看,方便记忆:
- 是否可写
- w 仅可写,写覆盖
- a 仅可写,写追加
- w+ 可以读写,写覆盖
- r+ 可以读写,写覆盖
- a+ 可以读写,写追加
- wb 以二进制格式打开一个文件只用于写入(如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件)
- 是否可读
- r 仅可读
- r+ 可以读写
- w+ 可以读写
- a+ 可以读写
- rb 以二进制格式打开一个文件用于只读
- 不可读的打开方式: w a
- 如果不存在会创建新文件的打开方式:a a+ w w+
#!/usr/bin/env python # encoding: utf-8 \'\'\' Created on 2017年9月15日 @author:实现文件读写_判断_处理操作 \'\'\' import os import shutil # os.remove(r"H:\123.txt")#删除指定文件 # chen=os.path.isfile(r"H:\1234.txt")#检验路径是否有指定文件 # os.removedirs(r"c:\python")#删除目录 # chen1=os.path.isdir(r"H:\wei")#检验路径是否有指定目录 # chen2=os.path.split(r"H:\656.txt")#返回文件名和路径 # chen3=os.stat(r"H:\656.txt")#获取文件属性 # chen4=os.path.getsize(r"H:\656.txt")#获取文件大小,以字节计算 # chen5=os.mkdir(\'chenwei\')#在当前位置创建一个目录 # chen6=os.makedirs(r"H:/667/chen")#指定位置创建目录 # os.mknod("test.txt")#创建空文件 # chen7= open(r"h:/test.txt",\'r\')#直接打开一个文件,如果文件不存在则创建文件 # shutil.move(r"H:\656.txt",r"H:\444")#移动文件 # ______________________________读文件________________________________________________ ##=================方式一:open================== w = open(\'123.txt\',\'r\') #shu = w.readline()#读取一行 shu = w.read()#读取全部 #shu = w.readlines()#把内容按行读取到list(数组)中 print(\'文件内容:\n%s\'%shu) w.close() ##不推荐使用,打开文件后需要手动关闭,不然报错 # #==================方式二:with open================= with open(\'123.txt\', \'r\') as f: data = f.read()#readline(),readlines() #print(\'文件内容:{}\'.format(data)) print(\'文件内容:{}\'.format(data))#关闭文件后打印文件内容 ##推荐使用,获取后自动关闭文件 ## ___________________________写入文件__________________________________________________ ##===============方式一============================= wen= \'hrhufgrhfurufhu5556556566666sssss56656\' abc= open(\'123.txt\',\'a\')#没有文件自动新建,w会覆盖原本的内容,a表示追加 abc.write(wen)#把wen写入abc,后面加换行符 #abc.writelines(wen)#把wen写入abc,不加任何东西 abc.close() ##==============方式二=============================== with open(\'123.txt\', \'w\') as f: data = \'123456chen5666\naaabbbccc\' f.write(data) #________________________读写文件-二进制______________________________________________________ # 要读取二进制文件,比如图片、视频等等,用\'rb\'模式打开文件即 #########读文件######### with open(r\'C:\Users\Administrator\Desktop\123.png\', mode=\'rb\') as f: text=f.read() #print(\'文件内容:\n{}\'.format(text)) #写文件 with open(r\'C:\Users\Administrator\Desktop\IOS_Dalan_Automation\test123.png\', mode=\'wb\') as tt: tt.write(text)#把123.png写入test123.png #----------------------------------读取时连续read()获取空--------------------------------------- ##原因:对象被read后,文件指针会指到最后,再次read会从当前指针(也就是文件最后)读取内容,所以就是空 with open(r\'C:\Users\Administrator\Desktop\123.txt\', \'r\') as fid: print(fid.read()) # 一定要加这一句,将游标移动到文件开头 fid.seek(0) print(fid.read()) # # ————————————判断文件中是否存在某个字符—————————————————————— with open(\'d://12345.txt\', \'r\') as foo: # foo=open(\'d://12345.txt\',\'r\') # chen=foo.readlines() # print(chen[1]) for chen in foo.readlines(): # foo.readlines()把内容按行读取到list中, chen表示循环行数 if \'陈伟\' in chen: print(chen) # # —————————————————读取文件、去掉换行符———————————————————————————— wo = open(r\'G:\eclipse_1\web_selenium1\test\123.txt\', \'r\') shu1 = wo.readline() shu = shu1.strip(\'\n\') # 去掉换行符 # # ——————————判断str中是否包含某个字符———————————————— cc = \'hduheudheuw陈伟额656565656565wedwdw\' keke = \'yy\' in cc print(keke) # true或false # # ——————————判断str中是否包含某个字符(也可以判断字符串位置)———————————————— string = \'helloworldchenwei565656566565656565656565\' # 判断某个字符是否在string变量中 if string.find(\'chenwei\') == 10: # 判断chenwei位置是否从10开始(10可加可不加) print(\'Exist\') else: print(\'not Exist\')
读取excel数据
import xlrd import xlwt def read_excel(): # 打开文件 workBook = xlrd.open_workbook(\'data/HanXueLi_201801.xlsx\'); # 1.获取sheet的名字 # 1.1 获取所有sheet的名字(list类型) allSheetNames = workBook.sheet_names(); print(allSheetNames); # 1.2 按索引号获取sheet的名字(string类型) sheet1Name = workBook.sheet_names()[0]; print(sheet1Name); # 2. 获取sheet内容 ## 2.1 法1:按索引号获取sheet内容 sheet1_content1 = workBook.sheet_by_index(0); # sheet索引从0开始 ## 2.2 法2:按sheet名字获取sheet内容 sheet1_content2 = workBook.sheet_by_name(\'Sheet1\'); # 3. sheet的名称,行数,列数 print(sheet1_content1.name,sheet1_content1.nrows,sheet1_content1.ncols); # 4. 获取整行和整列的值(数组) rows = sheet1_content1.row_values(3); # 获取第四行内容 cols = sheet1_content1.col_values(2); # 获取第三列内容 print(rows); # 5. 获取单元格内容(三种方式) print(sheet1_content1.cell(1, 0).value); print(sheet1_content1.cell_value(2, 2)); print(sheet1_content1.row(2)[2].value); # 6. 获取单元格内容的数据类型 # Tips: python读取excel中单元格的内容返回的有5种类型 [0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error] print(sheet1_content1.cell(1, 0).ctype); if __name__ == \'__main__\': read_excel();
list字典写execl
# -*- coding: utf-8 -*- import xlsxwriter # 生成excel文件 def generate_excel(expenses): workbook = xlsxwriter.Workbook(\'rec_data.xlsx\') worksheet = workbook.add_worksheet() # 设定格式,等号左边格式名称自定义,字典中格式为指定选项 # bold:加粗,num_format:数字格式 bold_format = workbook.add_format({\'bold\': True}) # money_format = workbook.add_format({\'num_format\': \'$#,##0\'}) # date_format = workbook.add_format({\'num_format\': \'mmmm d yyyy\'}) #设置列的宽度(下标从0开始) worksheet.set_column(5,6, 40)# 把5列6列宽度改为40(从0开始) worksheet.set_column(3,3, 15) worksheet.set_column(9,10, 30) # 用符号标记位置,例如:A列1行 worksheet.write(\'A1\', \'项目\', bold_format) worksheet.write(\'B1\', \'模块\', bold_format) worksheet.write(\'C1\', \'用例id\', bold_format) worksheet.write(\'D1\', \'用例描述\', bold_format) worksheet.write(\'E1\', \'是否启用\', bold_format) worksheet.write(\'F1\', \'headers\', bold_format) worksheet.write(\'G1\', \'请求url\', bold_format) worksheet.write(\'H1\', \'请求方式\', bold_format) worksheet.write(\'I1\', \'请求数据\', bold_format) worksheet.write(\'J1\', \'预期结果\', bold_format) worksheet.write(\'K1\', \'执行结果\', bold_format) worksheet.write(\'L1\', \'测试结果\', bold_format) worksheet.write(\'M1\', \'测试人员\', bold_format) row = 1 col = 0 for item in (expenses): # 使用write_string方法,指定数据格式写入数据 worksheet.write_string(row, col, item[\'项目\']) worksheet.write_string(row, col + 1, item[\'模块\']) worksheet.write_string(row, col + 2, item[\'用例id\']) worksheet.write_string(row, col + 3, item[\'用例描述\']) worksheet.write_string(row, col + 4, item[\'是否启用\']) worksheet.write_string(row, col + 5, item[\'headers\']) worksheet.write_string(row, col + 6, item[\'请求url\']) worksheet.write_string(row, col + 7, item[\'请求方式\']) worksheet.write_string(row, col + 8, item[\'请求数据\']) worksheet.write_string(row, col + 9, item[\'预期结果\']) worksheet.write_string(row, col + 10, item[\'执行结果\']) worksheet.write_string(row, col + 11, item[\'测试结果\']) worksheet.write_string(row, col + 11, item[\'测试人员\']) row += 1 workbook.close() if __name__ == \'__main__\': rec_data = [{\'请求数据\': \'\', \'用例id\': \'login_3\', \'预期结果\': \'{"data":{"yesterday":{"date":"6日星期一","high":"高温 12℃","fx":"北风","low":"低温 -3℃","fl":"<![CDATA[3级]]>","type":"晴"},"city":"北京","forecast":[{"date":"7日星期二","high":"高温 10℃","fengli":"<![CDATA[1级]]>","low":"低温 -3℃","fengxiang":"西北风","type":"多云"},{"date":"8日星期三","high":"高温 7℃","fengli":"<![CDATA[1级]]>","low":"低温 0℃","fengxiang":"南风","type":"阴"},{"date":"9日星期四","high":"高温 8℃","fengli":"<![CDATA[1级]]>","low":"低温 -1℃","fengxiang":"东南风","type":"多云"},{"date":"10日星期五","high":"高温 8℃","fengli":"<![CDATA[1级]]>","low":"低温 -1℃","fengxiang":"北风","type":"多云"},{"date":"11日星期六","high":"高温 8℃","fengli":"<![CDATA[1级]]>","low":"低温 0℃","fengxiang":"北风","type":"阴"}],"ganmao":"感冒高发期,尽量避免外出,外出戴口罩防护。","wendu":"3"},"status":1000,"desc":"OK"}\', \'请求url\': \'https://qqlykm.cn/api/api/tq.php?city=北京\', \'实际返回\': \'{"data":{"yesterday":{"date":"7日星期二","high":"高温 10℃","fx":"西北风","low":"低温 -3℃","fl":"<![CDATA[1级]]>","type":"多云"},"city":"北京","forecast":[{"date":"8日星期三","high":"高温 6℃","fengli":"<![CDATA[1级]]>","low":"低温 0℃","fengxiang":"南风","type":"阴"},{"date":"9日星期四","high":"高温 8℃","fengli":"<![CDATA[1级]]>","low":"低温 -1℃","fengxiang":"东风","type":"阴"},{"date":"10日星期五","high":"高温 8℃","fengli":"<![CDATA[1级]]>","low":"低温 0℃","fengxiang":"北风","type":"多云"},{"date":"11日星期六","high":"高温 8℃","fengli":"<![CDATA[2级]]>","low":"低温 -1℃","fengxiang":"北风","type":"阴"},{"date":"12日星期天","high":"高温 4℃","fengli":"<![CDATA[3级]]>","low":"低温 -6℃","fengxiang":"西北风","type":"晴"}],"ganmao":"感冒多发期,适当减少外出频率,适量补充水分,适当增减衣物。","wendu":"5"},"status":1000,"desc":"OK"}\', \'测试结果\': \'\', \'项目\': \'天气预报\', \'请求方式\': \'GET\', \'模块\': \'获取天气\', \'用例描述\': \'获取北京天气\', \'headers\': "{\'Content-Type\':\'application/x-www-form-urlencoded; charset=UTF-8\'}", \'执行结果\': \'\', \'测试人员\': \'\', \'是否启用\': \'yes\'}] generate_excel(rec_data)
如图:
封装-读写execl
#!/usr/bin/env python # encoding: utf-8 __author__ = "晨晨" import xlrd from xlutils.copy import copy class OperationExcel: def __init__(self,file_name=None,sheet_id=None): if file_name: self.file_name = file_name self.sheet_id = sheet_id else: self.file_name = \'../dataconfig/test.xls\' self.sheet_id = 0 self.data = self.get_data() #获取sheets的内容 def get_data(self): data = xlrd.open_workbook(self.file_name) tables = data.sheets()[self.sheet_id] return tables #获取单元格的行数 def get_lines(self): tables = self.data return tables.nrows #获取某一个单元格的内容 def get_cell_value(self,row,col): return self.data.cell_value(row,col) #写入数据 def write_value(self,row,col,value): \'\'\' 写入excel数据 row,col,value \'\'\' read_data = xlrd.open_workbook(self.file_name) write_data = copy(read_data) sheet_data = write_data.get_sheet(0) sheet_data.write(row,col,value) write_data.save(self.file_name) #根据对应的caseid 找到对应行的内容 def get_rows_data(self,case_id): row_num = self.get_row_num(case_id) rows_data = self.get_row_values(row_num) return rows_data #根据对应的caseid找到对应的行号 def get_row_num(self,case_id): num = 0 clols_data = self.get_cols_data() for col_data in clols_data: if case_id in col_data: return num num = num+1 #根据行号,找到该行的内容 def get_row_values(self,row): tables = self.data row_data = tables.row_values(row) return row_data #获取某一列的内容 def get_cols_data(self,col_id=None): if col_id != None: cols = self.data.col_values(col_id) else: cols = self.data.col_values(0) return cols if __name__ == \'__main__\': opers = OperationExcel() print(opers.get_cell_value(1,2))#获取单元格的内容 print(opers.get_row_values(2))#获取某行的内容 print(opers.get_cols_data(2))#获取某列的内容 opers.write_value(3,2,\'需要写入的数据\')#指定单元格写入数据(单元格有数据则覆盖)
获取文件大小并转换单位
#!/usr/bin/env python # -*- coding: utf-8 -* import os def size_format(path): size=os.path.getsize(path)#获取文件字节 if size < 1000: return \'%i\' % size + \'size\' elif 1000 <= size < 1000000: return \'%.1f\' % float(size/1000) + \'KB\' elif 1000000 <= size < 1000000000: return \'%.1f\' % float(size/1000000) + \'MB\' elif 1000000000 <= size < 1000000000000: return \'%.1f\' % float(size/1000000000) + \'GB\' elif 1000000000000 <= size: return \'%.1f\' % float(size/1000000000000) + \'TB\' print(size_format(r\'C:\Users\Administrator\Desktop\大蓝\工作\apk\母包\mubao.apk\'))
文件下载:
#! /usr/bin/env python # -*- coding:utf-8 -*- import os import gevent import asyncio import aiohttp import urllib.request from gevent import monkey ####_______________________________单个文件下载_________________________________________________________________________________________ ####image_url = \'http://img.jingtuitui.com/759fa20190115144450401.jpg\' image_url=\'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2340497325,2166644129&fm=26&gp=0.jpg\' file_path = r\'C:/Users/Administrator/Desktop/\' try: if not os.path.exists(file_path): os.makedirs(file_path) #如果没有这个path则直接创建 file_suffix = os.path.splitext(image_url)[1] print(file_suffix) filename = \'{}test{}\'.format(file_path, file_suffix) print(filename) urllib.request.urlretrieve(image_url, filename=filename) print(\'图片下载成功\') except IOError as e: print(\'磁盘读写操作错误\', e) except Exception as e: print(\'下载异常非磁盘io错误\', e) ####__________________________________________________多文件下载__________________________________________________________________________ def img_download(image_url,file_path): for i in image_url: if not os.path.exists(file_path): os.makedirs(file_path) #如果没有这个path则直接创建 #分离文件路径和后缀名 file_suffix = os.path.splitext(i)[1] print(file_suffix) filename = \'{}{}{}\'.format(file_path,i[-15:], file_suffix) print(filename) urllib.request.urlretrieve(i, filename=filename) print(\'图片下载成功\') print(\'全部下载完毕\') if __name__ == "__main__": #可以用淘宝、京东图片 image_url=[\'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2340497325,2166644129&fm=26&gp=0.jpg\',\'http://img.jingtuitui.com/759fa20190115144450401.jpg\',\'https://img.alicdn.com/imgextra/i3/827894246/O1CN01elaeCK1hEiIV640YT_!!0-item_pic.jpg_430x430q90.jpg\'] file_path = r\'C:/Users/Administrator/Desktop/\' img_download(image_url,file_path) ####______________________________________________异步-使用协程下载图片(第三方 gevent)________________________________________________________________________ monkey.patch_all() def download(name, url): file_path= r\'C:/Users/Administrator/Desktop/\' obj = urllib.request.urlopen(url)#请求url content = obj.read()#读取文件对象 #打开并写入 with open(file_path+name, "wb") as f: f.write(content) # 读取图片到1.jpg def main(): # 等待所有的协程开始运行结束 gevent.joinall( [ gevent.spawn(download, "1.jpg", "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2340497325,2166644129&fm=26&gp=0.jpg"), gevent.spawn(download, "2.jpg", "http://img.jingtuitui.com/759fa20190115144450401.jpg"), gevent.spawn(download, "3.jpg", "https://img.alicdn.com/imgextra/i3/827894246/O1CN01elaeCK1hEiIV640YT_!!0-item_pic.jpg_430x430q90.jpg") ] ) if __name__ == "__main__": main() #______________________________________________________async异步下载文件________________________________________________________________ async def handler(url, file_path): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0" } async with aiohttp.ClientSession() as session: r = await session.get(url=url, headers=headers) with open(file_path, "wb") as f: f.write(await r.read()) f.flush() os.fsync(f.fileno()) loop = asyncio.get_event_loop() loop.run_until_complete(handler(url, file_path))
linux定时检查文件是否新增并提取增量数据
#!/usr/bing/env python # -*- coding: utf-8 -*- import os import threading #总行数 count=os.popen(\'grep "Tunnel established at" nohup.out\').readlines() count_1=len(count) #每次扫描行数 def every_time(): a=os.popen(\'grep "Tunnel established at" nohup.out\').readlines() return len(a) #当有新增时获取最后一行 def every_tail(): a=os.popen(\'grep "Tunnel established at" nohup.out|tail -n 1\').readline() b=a.rstrip()[-28:]+\'/jenkins\' c=b.lstrip() return c def python_timer(): print("start" ) global count_1 print(count_1)#初始行数 every_count=every_time() print(every_count)#每次扫描 if count_1 < every_count: count_1=every_count url=every_tail() print(url) ########这里可以把更新的内容发送邮件 timer = threading.Timer(300,python_timer) timer.start() if __name__ == "__main__": python_timer()
文件处理相关:
#!/usr/bin/env python3 #coding: utf-8 import requests import os import time from urllib import request #________________________判断url是否可用_________________________________________ try: with request.urlopen("http://chenwei.com") as file: print(file.status) print(file.reason) print(file.geturl()) except Exception as e: print(e) #_______________________________在5秒内判断url是否可用____________________________ url = \'http://chenwei.com\' print(time.strftime(\'%Y-%m-%d %H:%M:%S\')) try: html = requests.get(url, timeout=5) print(\'打印响应内容\',html.read()) print(\'返回url\',html.url) print(\'success\') except requests.exceptions.RequestException as e: print(\'已经超时了\') print(e) print(time.strftime(\'%Y-%m-%d %H:%M:%S\')) #__________________________通过url判断文件大小___________________________________ def size_file(url): \'\'\'获取url文件的大小-不下载\'\'\' r=requests.get(url) file_size_str=r.headers[\'Content-Length\'] #提取出来的是个数字str file_size=int(file_size_str)/1024/1024 #把提取出数字str转为int或者float进行运算 size=round(file_size,2)#保留小数后2位 print(size,\'M\') #____________________下载文件显示进度条&下载时间&平均下载速度_____________________ def progressbar(url,path): if not os.path.exists(path): # 看是否有该文件夹,没有则创建文件夹 os.mkdir(path) start = time.time() #下载开始时间 response = requests.get(url, stream=True) #stream=True必须写上 size = 0 #初始化已下载大小 chunk_size = 1024 # 每次下载的数据大小 content_size = int(response.headers[\'content-length\']) # 下载文件总大小 try: if response.status_code == 200: #判断是否响应成功 file_size=round((content_size / chunk_size /1024),2)#文件大小 print(\'文件大小为:{size:.2f} MB\'.format(size = content_size / chunk_size /1024)) #开始下载,显示下载文件大小 filepath = path+\'\123.apk\' #设置图片name,注:必须加上扩展名 with open(filepath,\'wb\') as file: #显示进度条 for data in response.iter_content(chunk_size = chunk_size): file.write(data) size +=len(data) #print(\'\r\'+\'[下载进度]:%s%.2f%%\' % (\'>\'*int(size*50/ content_size), float(size / content_size * 100)) ,end=\' \')#显示进度条 end = time.time() #下载结束时间 print(\'下载所用时间: %.2f秒\' % (end - start)) #输出下载用时时间 print(\'平均下载速度:{}M/s\'.format(round (file_size/(end-start)),2)) except: print(\'文件下载异常\') progressbar(\'https://pkg.wbdd2018.com/game/lmhxclhxtt_ad/apk_sem/bd_lmhxclhxtt_ad_1883_2507.apk\',r\'C:\Users\Administrator\Desktop\chenwei\')#url,存储路径
相关连接:
https://www.liujiangblog.com/course/python/41 .....................文件读写
https://www.cnblogs.com/hanmk/p/9843136.html .....................python配置文件封装
https://blog.csdn.net/sinat_38682860/article/details/111406079 ...................ini和yaml配置文件讲解