鱼C论坛

 找回密码
 立即注册
查看: 1223|回复: 3

[已解决]new方法对于Excel的应用一些问题

[复制链接]
发表于 2017-11-23 10:33:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想法公司Erp 导出Excel 分为三种格式‘xls’、‘csv’、‘xlsx’ 希望通过 建立一个类方法 通过应用new方法使得 类的实列化对象一开始就是读取了Excel表数据,通过构建方法对实列化对像进行数据分析。

具体例子:
有一个 ‘补毛利.xls’文件

实列化对象对象 data

data=Excel_read('补毛利.xls')

问题:
data.count11() 方法没有办法建立
我怀疑 我 new方法的返回值错了 那个大大能帮我改下,能对 实列化对象添加方法谢谢


代码如下:

import openpyxl,os,csv,xlwt,xlrd
from openpyxl import Workbook


def xls_read(path,workbook=1,row_num=1):#row_num 默认从第一行开始读取数据
    xls=xlrd.open_workbook(path)#打开xls文件
    workbook-=1
    sheet=xls.sheet_by_index(workbook)#sheet 读取 第一个 表
    data=[]
    row_num-=1
    rows=sheet.nrows
    for i in range(row_num,rows):
        every_line=sheet.row_values(i)
        data.append(every_line)
    return data
   
def csv_read(path):#导出的是完整数据
    with open(path) as f:
        reader=csv.reader(f)
        data=[row for row in reader]
        
    return data

def xlsx_read(path,workbook=1,row_num=1):#woorkbook默认第一个工作簿 row_num 默认从第一行开始读取数据
    wb = openpyxl.load_workbook(path)
    workbook-=1
    a=wb.get_sheet_names()
    sheet=wb.get_sheet_by_name(a[workbook])
    rows=sheet.max_row+1
    columns=sheet.max_column+1
    data=[]
    for i in range(row_num,rows):
        临时列表=[]
        for y in range(1,columns):
            临时列表=临时列表+[sheet.cell(row=i, column=y).value]
        data=data+[临时列表]
    return data

class Excel_read(object):
    def __new__(cls,path,workbook=1):
        file_extension=os.path.splitext(path)[-1]
        if 'xls' in file_extension:
            print('开始读取xls,第%d张工作薄数据'%workbook)
            data=xls_read(path,workbook)
        elif 'csv' in file_extension:
            print('开始读取csv数据')
            data=csv_read(path)
        elif 'xlsx' in file_extension:
            print('开始读取xlsx第%d张工作薄数据'%workbook)
            data=xlsx_read(path,workbook)           
        return data
    def count11(self):
        self=self[1]
        return self
最佳答案
2017-11-23 10:45:17
data本身只是一个list,又不是你定义的类的实例化对象,怎么能调用类方法?
1511404006(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-23 10:45:17 | 显示全部楼层    本楼为最佳答案   
data本身只是一个list,又不是你定义的类的实例化对象,怎么能调用类方法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-23 10:51:14 | 显示全部楼层
BngThea 发表于 2017-11-23 10:45
data本身只是一个list,又不是你定义的类的实例化对象,怎么能调用类方法?

能问下 ,new方法要怎么改才能达到 能直接对 data本身list 进行数据类方法操作?还是说new方法 类对象只能fload、int、str这些类型?才学半年有点绕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 10:53:25 | 显示全部楼层
tidus 发表于 2017-11-23 10:51
能问下 ,new方法要怎么改才能达到 能直接对 data本身list 进行数据类方法操作?还是说new方法 类对象只 ...

小甲鱼老师的课程里有这一块的详细讲解,你可以再温习一遍先
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表