{
"1":["张三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
这个小项目中涉及用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)"
"""
* 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')
运行结果后,文件夹中如愿以偿地出现了三个相应的xlsx文件,点开看看里面的内容:
numbers.xlsx: