【openpyxl】python中对Excel进行写入操作,写入一列或者一行(从excel中读出label和feature对应格式方法以及插入一行或者一列方法实现)

前言

最近在做expansion of datset,所以需要把扩展的dataset写入到excel中
我已经矩阵运算全部搞定,最终输出的是两个输出 labels 和 features
自己整理为以下格式

label = [[0],
         [1],
         [2],
         [3]
         ]
feature = [
           [0.1, 0.2, 0.3, 0.4, 0.5],
           [0.11, 0.21, 0.31, 0.41, 0.51],
           [0.6, 0.7, 0.8, 0.9, 1.00],
           [1.1, 1.2, 1.3, 1.4, 1.5],
           ]

解决方案

先是准备用python带的xlrd xlrd 等包来操作感觉真的不太行
换思路,用第三方包openpyxl来操作

pip install openpyxl

官方文档在这里
https://openpyxl.readthedocs.io/en/stable/index.html

代码

废话不多说,show you my code

# coding=utf-8
from openpyxl import Workbook
import numpy as np

wb = Workbook()

ws = wb.create_sheet("che")
label = [[0],
         [1],
         [2],
         [3]
         ]
feature = [
           [0.1, 0.2, 0.3, 0.4, 0.5],
           [0.11, 0.21, 0.31, 0.41, 0.51],
           [0.6, 0.7, 0.8, 0.9, 1.00],
           [1.1, 1.2, 1.3, 1.4, 1.5],
           ]
#这个地方之所以 变成numpy格式是因为在很多时候我们都是在numpy格式下计算的,模拟一下预处理
label = np.array(label)
feature = np.array(feature)

label_input = []
for l in range(len(label)):
    label_input.append(label[l][0])



ws.append(label_input)
for f in range(len(feature[0])):

    ws.append(feature[:, f].tolist())


wb.save("chehongshu.xlsx")

结果生成一个excel,最后结果如下图:
在这里插入图片描述

总结

openpyxl包用起来是真的方便,对于写入,只需要建立一个LIST进行append就好了,如果excel为空的那append就从第一行开始递增操作,你也可以理解为一个ws.append()操作就相当于写入一行,如果excel为有数据的时候,那写入操作从没有数据的那一行开始写入;这里也说一下本来想用Insert来着但是忽略了一个条件,就是insert有个前提条件就是For example to insert a row at 7 (before the existing row 7):,意思为插入之前你的数据的大小一定是比要插入的行数或者列数大的,也就是说插入只能插到里面,不能在边缘插。

插入核心参考代码

for col in range(len(label)):

    print col
    ws.insert_cols(col+1)

    for index, row in enumerate(ws.rows):
        #print row
        
          if index == 0:
            #row[col+1].value = label[col][0]
            print "label"
            print label[col]
        else:
            print "feature"
            print feature[col][index-1]
            #row[col+1].value = feature[col][index-1]
      

读取代码

在这里插入图片描述

def create_data_expansion(path, sheet):
    data_init = pd.read_excel(path, sheet)
    # print data_init
    data_df = pd.DataFrame(data_init)
    print data_df
    data_df_transponse = data_df.T
    label_expansion = np.array(data_df_transponse.index)
    label_expansion_l = []
    for l in range(len(label_expansion)):
        label_expansion_l.append([l])
    feature_expansion = np.array(data_df_transponse)
    label_expansion = np.array(label_expansion_l)

    return label_expansion, feature_expansion

if __name__ == "__main__":
    path_name = "excel_demo.xlsx"
    sheet_name = "11"
    label, feature = create_data_expansion(path_name, sheet_name)
    print label
    print feature
    

结果:
在这里插入图片描述

嗨 朋友们: 我还在编写这个程序...然而遇到了一些新的麻烦... 想要实现的功能: 将某个excel 的一 写入 另一个excel 的一. 当前我已经可以通过自定义的 get infor() 函数 提取某一excel的数据 并存储在表 (L=[ ] ), ![图片说明](https://img-ask.csdn.net/upload/201909/01/1567349983_131463.png) 并通过open excel cost () 函数 将这些信息插入到目标excel了。 然而,我发现自己所使用的 插入excel方法只能针对 某个 特定的 单元格 (如我代码之的 "D2" 单元格)。 我想对这个open excel cost () 函数 代码进行调整,使得它可以根据get infor() 函数表返回结果 对目标excel的某一 批量赋值。 请问应该如何实现呢? 我的代码如下, 感谢大佬们的辛苦指正 ``` import openpyxl import xlrd def get_infor(): book = xlrd.open_workbook('C:/Users/lenovo/Desktop/模板.xlsx') sheet = book.sheet_by_name('WRT模板IN') L =[] for i in range (2,sheet.nrows): # i 从第四开始 PN = str(sheet.cell(i,5).value) Cost_USD = str(sheet.cell(i, 9).value) L.append((PN,Cost_USD)) #t=tuple(L) return L #print(L) t1= get_infor() #print(t1) # # sh = t1[0][0] # print(sh) # def Open_excel_cost(): workbook = openpyxl.load_workbook('C:/Users/lenovo/Desktop/文档模板/IN/Cost_IN.xlsx') sheet = workbook.worksheets[0] # 第一个页签 sheet['D2'] = t1[0][1] #sheet['A1'] = t1[1][2] workbook.save('C:/Users/lenovo/Desktop/文档模板/IN/Cost_IN.xlsx') # 此步骤要保存才行的, 否则是不会在excel显示的 2019.8.24 print(sheet['D2'].value) print(sheet.title) Open_excel_cost() ```
1、python openpyxl 循环写入EXCEL 为什么只保留最后一条。在循环过程一行都其实都成功写入EXCEL文件,但循环到下一条都将上一条记录删除。最后只保留最后写入一条数据。 2、代码 ``` for href_url,roos in zip(href_url,href_name): addurl = href_url name = roos.xpath('./td[4]/text()')[0] i=i+1 #添加数据 #tree.insert("",i,text="",values=(i,name,addurl)) #得到企业详细信息 #url_id = "getxxgkContent&dataid=9339c790f8694f878b81e6fdc864be69" addurl=addurl[39:93] datas = {"xkgk": "getxxgkContent", "dataid": addurl} url = "http://permit.mee.gov.cn/permitExt/xkgkAction!xkgk.action?xkgk=" + addurl html = requests.get(url, headers=datas) soup = BeautifulSoup(html.text, 'lxml') name_id = soup.find_all('p', style="font-size:36px;")[0].text # 得到企业名称 name_add = soup.find_all('p', style="font-weight: bold;color: green;font-size: 14px;")[0].text # 得到企业地址等信息 ..strip() 属性删除空格 content=name_add content = content.strip() # 删除字符串左边空格 content = content.split() # 拆分字符串,通过指定分隔符对字符串进行分割,默认是空格。rstrip("\xa0\xa0\xa0\xa0\r\n\t\t\t") # content=content.partition(":") str2 = ''.join(content) u1, u2, u3, u4, u5 = str2.split(':', 4) f1 = u2.find('行业类别') f2 = u2[0:f1] g1 = u3.find('所在地区') g2 = u3[0:g1] h1 = u4.find('发证机关') h2 = u4[0:h1] ii=str(i) wb = Workbook() # 创建文件对象 # grab the active worksheet ws = wb.active # 获取第一个sheet cell = ws["A1"] cell.value = '序号' cell = ws['A'+ii] cell.value = i cell = ws["B1"] cell.value = '企业名称' cell = ws["B"+ii] cell.value = name cell = ws["C1"] cell.value = '生产经营场所地址' cell = ws["C"+ii] cell.value = f2 cell = ws["D1"] cell.value = '行业类别' cell = ws['D'+ii] cell.value = g2 cell = ws["E1"] cell.value = '所在地区' cell = ws['E'+ii] cell.value = h2 cell = ws["f1"] cell.value = '发证机关' cell = ws['f'+ii] cell.value = u5 wb.save("d:\\sample.xlsx") messagebox.showinfo("提示",ii) pass ``` #excel写入方式修改为,但最后只保留最后写入一条数据。 ``` wb = Workbook() # 创建文件对象 # grab the active worksheet ws = wb.active # 获取第一个sheet tableTitle = [a, b,c,] for col in range(len(tableTitle)): c = col + 1 ws.cell(row=1, column=c).value = tableTitle[col] # 数据表基本信息 tableValues = [[f2,g2, h2,]] for row in range(len(tableValues)): ws.append(tableValues[row]) # wb.save(ExcelFullName) wb.save("d:\\1.xlsx") pass ```
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页