chen-xia

文件处理_配置文件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配置文件讲解

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-11-23
  • 2022-02-25
  • 2021-12-21
  • 2022-12-23
  • 2021-12-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
相关资源
相似解决方案