美文网首页
191221 Python学习笔记——xlrd、csv

191221 Python学习笔记——xlrd、csv

作者: dicklim | 来源:发表于2019-12-21 13:26 被阅读0次

    情境:在出完所有包的图之后,我获得了80多个病人的标记文件,都用各自的编号编好了,label也已经标注好了。

    病人的标注文件

    但是老师给我的表格数据里有180多个病人,其中大部分是没有的,所以我就要把已经标好病例的资料从表格中提取出来组成一个文件。

    病例号
    参考:https://www.cnblogs.com/insane-Mr-Li/p/9092619.html
    思路:将所有病人的文件夹组成一个列表。将整个表格按照行数遍历,把影像号与病人id列表比对,如果有就提取这个病人的信息组成一个字典。然后把所有的字典放进一个列表,然后通过这个列表生成一个csv文件。
    使用的包:os,xlrd,csv
    import os
    import xlrd
    import csv
    
    path = 'D:/AIproject/'
    filename = os.listdir(path + 'jpg_dataset/data/')  #获取所有病人文件夹的名字
    len(filename)      #看看文件夹数量对不对
    
    data = xlrd.open_workbook(path + 'dataset.xlsx')
    names = data .sheet_names()   #看看这个表格有几个sheet,后面要提取sheet
    table = data.sheet_by_name('Sheet1')     #按名字提取出sheet1
    nrows = table.nrows        #获取行数,这儿行数包括了标题行,后面要把标题行去掉
    
    patients = []   #建立一个空列表,后面拿来放病人
    for i in range(1,nrows):   #标题是第0行,注意不要加入循环
        id = str(int(table.cell_value(i,2)))
        #cell_value取出来的是一个数值,会有小数点,所以先用int取整,然后用str将其转化成字符串,否则后面就没法和filename里面的id匹配
        if id in filename:  #如果这个id有对应的病人文件夹,那就把病人的信息提取出来,并且给出label的index,生成一个patient的字典。
            name = table.cell_value(i,0)
            age = table.cell_value(i,1)
            detail = table.cell_value(i,4)
            size = table.cell_value(i,5)
            pathology = table.cell_value(i,6)
            if pathology == 'IS':    #按照病理浸润赋予index
                ind = 1
            else:
                ind = 0
            patient = {'name':name,'age':age,
                       'id':id,'detail':detail,'size':size,
                       'pathology':pathology , 'ind':ind}
            patients.append(patient)   #将所有的patient加到patients列表里
    
    #下面是要生成一个csv表格
    with open(path + 'dict.csv', 'w',newline='') as csv_file:
        w = csv.writer(csv_file)
        fieldnames = patients[0].keys() #获取第一个病人的所有键作为表头
        w.writerow(fieldnames)  #写入表头
        for row in patients:
            w.writerow(row.values())    #后面就只写值了
    

    xlrd的语法

    1. 常用单元格中的数据类型

      • empty(空的)
      • string(text)
      • number
      • date
      • boolean
      • error
      • blank(空白表格)
    2. 打开Excel文件读取数据
      data = xlrd.open_workbook( path )
      path填写文件名以及路径,同样是绝对路径
      注意这儿是可以支持中文的,如果路径或者文件名有中文,需要前面加一个r表示原生字符。

    3. 常用的函数
      注意:需要区分,book是指整个大表格,sheet是指单个小的工作表。

      • 获取book中一个工作表,对于工作表的操作
      table = data.sheets()[0]                                  #加载所有sheet
      table = data.sheet_by_index(sheet_indx)      #通过sheetx指定获取第x个sheet
      table = data.sheet_by_name(sheet_name)   #通过sheet的名称来获取工作表
      #以上三个函数都会返回一个xlrd.sheet.Sheet()对象
      names = data.sheet_names()    #返回book中所有工作表的名字
      
      • 行的操作
      nrows = table.nrows                          #获取该sheet中的有效行数
      table.row(rowx)                                  #返回由第x行中所有的单元格对象组成的列表
      table.row_slice(rowx)                        #返回由该行中,给定的列的所有单元格对象组成的列表
      table.row_types(rowx, start_colx=0, end_colx=None)    #返回由该行中所有单元格的数据类型组成的列表
      table.row_values(rowx, start_colx=0, end_colx=None)   #返回由该行中所有单元格的数据组成的列表
      table.row_len(rowx)                                 #返回该列的有效单元格长度
      
      • 列(colnum)的操作
      table.col(colx, start_rowx=0, end_rowx=None)  #返回由该列中所有的单元格对象组成的列表
      table.col_slice(colx, start_rowx=0, end_rowx=None)  #返回由该列中所有的单元格对象组成的列表
      table.col_types(colx, start_rowx=0, end_rowx=None)    #返回由该列中所有单元格的数据类型组成的列表
      table.col_values(colx, start_rowx=0, end_rowx=None)   #返回由该列中所有单元格的数据组成的列表
      
      • 单元格的操作
      table.cell(rowx,colx)                         #返回单元格对象
      table.cell_type(rowx,colx)                #返回单元格中的数据类型
      table.cell_value(rowx,colx)              #返回单元格中的数据
      

    csv的语法

    这儿主要用的是一个将字典的列表变成表格的操作
    语法回头再探索吧

    相关文章

      网友评论

          本文标题:191221 Python学习笔记——xlrd、csv

          本文链接:https://www.haomeiwen.com/subject/itrinctx.html