Python下载图片文件(从xlsx,csv文件)

环境: Python 3.5

使用:从xlsx,csv等文件中按‘行’读取数据,并调用cb_func回调函数或on_process_row_data成员方法进行数据行的处理。

这是一个基类。仅作示范!

如果需要,请根据具体的数据行进行cb_func或on_process_row_data的重载!

代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# 数据表(xlsx, csv)读取操作
# mylaf
# 2020-04-09 1522
#

import pandas as pd

def urllib_download(url, file, try_num = 0):
    #import urllib
    import time
    from urllib.request import urlretrieve
    
    if try_num < 0:
        return -1

    time.sleep(0.001)
    try:
        urlretrieve(url, file)
        return 0
    except:
        print('HTTPError: url=', url, ',try', try_num, '...')
        try_num -= 1
        return urllib_download(url, file, try_num)


class RowItemProcessor(object):
    '''
    从指定数据文件中读取数据行,并逐行处理
    '''

    # 初始化:啥也不干
    def __init__(self) -> None:
        super().__init__()

        self.url_file = ''
        self.url_type = ''
        self.data_frame = None

    # 设置数据文件来源为xlsx文件
    def set_excel(self, xlsx):

        self.url_file = xlsx
        self.url_type = 'xlsx'
        self.data_frame = pd.read_excel(self.url_file)

        if self.data_frame is None:
            return -1, 'Error: NON-support file'
        
        return len(self.data_frame.index.values) 

    # 设置数据文件来源为csv文件
    def set_csv(self, csv):

        self.url_file = csv
        self.url_type = 'csv'
        self.data_frame = pd.read_csv(self.url_file)

        if self.data_frame is None:
            return -1, 'Error: NON-support file'
        
        return len(self.data_frame.index.values) 

    # 设置数据文件来源为txt文件
    def set_txt(self, txt):
        self.url_file = txt
        self.url_type = 'txt'
        self.data_frame = open(self.url_file, 'r')

        if self.data_frame is None:
            return -1, 'Error: NON-support file'
        
        return 0
        #return len(self.data_frame.index.values) 

    # 开始处理
    def process(self, cb_func=None):
        '''
        brief: 开始处理整个数据
        param: cb_func: 行数据处理的回调函数
               如果cb_func==None,则调用成员方法on_process_row_data 
        return: 0=成功,其他=失败
        '''
        if cb_func is None:
            cb_func = self.on_process_row_data

        if self.url_type == 'xlsx' or self.url_type == 'csv':
            # 读取数据行
            for row in self.data_frame.index.values:
                # 行数据
                row_data = self.data_frame.loc[row].values

                #
                cb_func(row, row_data)

            return 0
        elif self.url_type == 'txt':
            return 0
        else:
            return -1
    
    # 根据具体的行数据进行个性处理函数
    def on_process_row_data(self, row_id, row_data):
        print(__file__, ':', row_id, ':', row_data) 


def test1_create_csv():

    # create csv file
    nme = ["Google", "Runoob", "Taobao", "Wiki"]
    st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
    ag = [90, 40, 80, 98]

    dc = {'name': nme, 'site': st, 'age': ag}

    df = pd.DataFrame(dc)

    df.to_csv('site.csv')

def test2_use_default_process_row_data():
    print('\n------------- test2_use_default_process_row_data -------------')
    ider = RowItemProcessor()
    ider.set_csv('site.csv')
    ider.process()

def test3_use_outter_process_row_data():
    print('\n------------- test3_use_outter_process_row_data -------------')
    # 定义一个外部行数据处理方法
    def outter_process_row_data(row_id, row_data):
        print('outter_process_row_data', ':', row_id, ':', row_data) 

    ider = RowItemProcessor()
    ider.set_csv('site.csv')
    ider.process(outter_process_row_data)

def test4_use_overwrite_process_row_data():
    print('\n------------- test4_use_overwrite_process_row_data -------------')
    # 重载成员函数 on_process_row_data
    class IDer2(RowItemProcessor):
        def __init__(self) -> None:
            super().__init__()

        def on_process_row_data(self, row_id, row_data):
            print(__file__, '[IDer2] :', row_id, ':', row_data) 

    ider = IDer2()
    ider.set_csv('site.csv')
    ider.process()

def main():
    test1_create_csv()
    test2_use_default_process_row_data()
    test3_use_outter_process_row_data()
    test4_use_overwrite_process_row_data()


if __name__ == '__main__':
    main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值