【Python】用python对excel进行读写

Description

  • Yixiaohan/show-me-the-code 第0014 ~ 0016题 && 第0020题
  • 0014 :纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示:
    {
    "1":["张三",150,120,100],
    "2":["李四",90,99,95],
    "3":["王五",60,66,68]
    }

    请将上述内容写到 student.xls 文件中。
  • 0015:纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示:
    {
    "1" : "上海",
    "2" : "北京",
    "3" : "成都"
    }

    请将上述内容写到 city.xls 文件中。
  • 0016:纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示:
    [
    [1, 82, 65535],
    [20, 90, 13],
    [26, 809, 1024]
    ]

    请将上述内容写到 numbers.xls 文件中。
  • 0020:本来此题题意是对excel表格应用formula。原题有点麻烦,所以把此题改为对numbers.xls进行按列求和操作。

Notes

    这个小项目中涉及用python操作excel的方法。
   
1. 首先观察到这三个txt文档中的内容非常像dict或list这些基本数据结构的写法,于是考虑能否将其转化成基本数据结构。参考了python中将string转化为dict的方法。这个小项目中选择了eval()函数,这个函数能直接返回参数运行的结果,但是有一些危险性,可以参看python eval()函数的妙用和滥用
   
2. 查找什么python中什么模块能够对excel进行操作,参看了以下资料:
    (1)用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧
    (2)Python处理Excel数据
    (3)How to write .xls (Excel) files in Python - Tutorial
这个视频比较老,里面的方法对03及以前的excel能用,07及以后就不行了。
    (4)OpenPyXL官方手册
    .
3. 最后选择用openpyxl模块对excel进行操作。
    写excel操作
    (1)为了写excel,首先可以建立一个Workbook类对象,对应着一个excel文档。
    wb = Workbook() # 对应着一个xlsx文件
   
    (2)接着,对Workbook类对象调用create_sheet()函数,建立新的表单,参数为表单的名字,还有其他参数(加入的位置?)。
    sheet = wb.create_sheet(title = fileName.replace('.txt', '')) # xlsx文件中的一张表,加在后面
   
    (3)对sheet中的cell的value进行写操作:
    sheet.cell(row = lineNum, column = 1).value = c_key
    为了指定cell,可以采用以上方式,也可以:
    print(ws3['AA10'].value)
   
    对excel进行写操作时,也可以一下子写一行:
    for row in range(1, 40):
      sheet.append(range(600))

    以上代码实现的内容是对sheet的前四十行,每行的格子里都依次放上1到600。

    (4)最后要进行保存操作:
    wb.save(new_fileName)

    读excel操作
    (1)用load_workbook()函数打开一个已存在的excel文件:
    wb = load_workbook(fileName.replace('txt', 'xlsx'))

    (2)选择一个excel文档中的一个表格:
    sheet = wb['numbers']

    其他操作同上。
   
4. dictionary的遍历
    (1)dict.items()方法会返回一个list,list中元素是dict中键-值对,元组的形式。
    (2)d.keys(), d.values()分别返回一个有全部的key或全部value的list。
    .
5. excel中的formula,直接写在相应的单元格中就行:
    sheet["A1"] = "=SUM(1, 1)"

My Code

"""
* 0014 && 0015 && 0016
    txt转化成excel
    by VegB
    2017/1/28

* 0020
    excel中formula的使用
    by VegB
    2017/1/29
"""

from openpyxl import Workbook, load_workbook

def T2E(fileName): # txt to excel
    fd = open(fileName, 'r')
    context = fd.read() # 读入所有内容
    container = eval(context) # 把string转化成dictionary/list,这个小项目中只有这两种情况

    wb = Workbook() # 对应着一个xlsx文件
    sheet = wb.create_sheet(fileName.replace('.txt', '')) # xlsx文件中的一张表,加在后面

    # d.items()方法会将键-值对作为元组返回, d.keys(), d.values()
    if type(container) == type({}):
        lineNum = 1
        for (c_key, c_value) in container.items():
            sheet.cell(row = lineNum, column = 1).value = c_key

            if type(c_value) == type([]):
                for j in range(0, len(c_value)):
                    sheet.cell(row = lineNum, column = j + 2).value = c_value[j]
            else:
                sheet.cell(row = lineNum, column = 2).value = c_value

            lineNum += 1

    elif type(container) == type([]):
        for i in range(0, len(container)):
            for j in range(0, len(container[i])):
                sheet.cell(row = i + 1, column = j + 1).value = container[i][j]

    fd.close()
    new_fileName = fileName.replace('txt', 'xlsx')
    wb.save(new_fileName)

def Calc(fileName):
    wb = load_workbook(fileName.replace('txt', 'xlsx')) # 打开excel表格
    sheet = wb['numbers'] # 选择一个sheet
    for j in range(0, 3):
        sheet.cell(row = 4, column = j + 1).value = '=SUM(%s%d:%s%d)'% (chr(ord('A') + j), 1, chr(ord('A') + j), 3)
    wb.save(fileName.replace('txt', 'xlsx'))



T2E('student.txt')
T2E('city.txt')
T2E('numbers.txt')
Calc('numbers.txt')

Result

    运行结果后,文件夹中如愿以偿地出现了三个相应的xlsx文件,点开看看里面的内容:

     student.xlsx:
 
    student.xlsx

 
     city.xlsx:
   
      city.xlsx

 
    numbers.xlsx:

  numbers.xlsx 
   
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值