python编写一个4行4列的表格_4个方法用Python自由定制Excel表格

很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速。

下面我来举几个例子。

删除重复行和空行

我们直接用dict.fromkeys的方法把当前的数据转为字典,默认的值为None因为用不到,也就无所谓了。然后我们再用list直接对结果进行类型转换,转换为list。

In [135]:

for row in rows4:

print(row)

('name', 'address')

('tom li', 'beijing')

('tom li', 'beijing')

('',)

('mary wang', 'shandong')

('mary wang', 'shandong')

('',)

('de8ug', 'guangzhou')

In [148]:

dict.fromkeys(rows4)

Out[148]:

{('name', 'address'): None,

('tom li', 'beijing'): None,

('',): None,

('mary wang', 'shandong'): None,

('de8ug', 'guangzhou'): None}

In [137]:

list(dict.fromkeys(rows4))

Out[137]:

[('name', 'address'),

('tom li', 'beijing'),

('',),

('mary wang', 'shandong'),

('de8ug', 'guangzhou')]

这时候,重复数据直接去掉了,注意我们这里的dict是python3新版本的,所以顺序没有影响,如果你还在用python2或者python3.5以下,建议升级一下python版本。

接下来,就是空数据的处理了。观察('',)是个元组,第一个位置的数据为空字符串,那么整体长度为1,可以直接通过循环来去掉。

这里的循环我们可以用Python中的语法糖写法,直接一行搞定,最后加个判断只留下长度大于1,最后用list转换为列表。

In [179]:

list(x for x in dict.fromkeys(rows4) if len(x[0])>1)

Out[179]:

[('name', 'address'),

('tom li', 'beijing'),

('mary wang', 'shandong'),

('de8ug', 'guangzhou')]

上面的研究搞定了,直接把研究结果放到函数中解决重复行和空行的问题。

注意这时候我们处理的行数据,所以就不再按列循环了。而且,当前的sheet中处理之后,每一行的内容都会修改位置或删除。所以我们先用old_rows = [x for x in sheet.values]取到旧的每一行的数据,注意这里的sheet后直接用values取到数据,而不是cell对象。这里的old_rows是个列表,就可以用刚才的研究直接转为删除重复和空行的数据了。

接下来,用sheet.delete_rows(1, sheet.max_row)

删除所有行,第一个参数表示从第一行开始,第二个参数为最大行数。最后,用循环新的行数据的方式,把新数据写入当前的sheet。

In [189]:

def handle_duplicate(wb, sheetname):

"""

去除重复行,空行

先取出每一行,清空sheet,处理后写回

"""

print(f'开始处理工作表:{sheetname}'.center(18, '-'))

sheet = wb[sheetname]

old_rows = [x for x in sheet.values]

print('修改前:', old_rows)

new_rows = list(x for x in dict.fromkeys(old_rows) if len(x[0])>1)

print('修改后-》》', new_rows)

# 删除所有行

sheet.delete_rows(1, sheet.max_row)

# 写入新数据

for row in new_rows:

sheet.append(row)

运行测试,查看结果。再说一次,一定记得测试啊!如果有错误就根据错误提示,查看代码,反复调试,去除bugs。

In [190]:

wb = load_data()

handle_duplicate(wb, '重复行')

save_as(wb)

删除空格

删除空格也需要用到字符串的函数,所以这里还是简单研究一下。如果我们想去除字符串中间的空格,可以用split默认进行分割,然后把分割的结果用’’.join方法连接起来就可以了。

注意join前是空的字符串。这里也用不到strip去除两端的空格了,因为split分割后只有几个最后的字符串组成的列表。

In [192]:

a="a b c "

In [194]:

a.strip()

Out[194]:

'a b c'

In [195]:

a.split()

Out[195]:

['a', 'b', 'c']

In [196]:

''.join(a.split())

Out[196]:

'abc'

In [ ]:

研究成功后,写入函数。这次命名为handle_blank。

In [197]:

def handle_blank(wb, sheetname):

"""

按列循环, 通过参数确认目标

"""

print(f'开始处理工作表:{sheetname}'.center(18, '-'))

sheet = wb[sheetname]

for col in sheet.iter_cols(): # 不加参数,循环所有列

for cell in col:

print('修改前:', cell.value, end='')

cell.value = ''.join(cell.value.split())

print('修改后-》》',cell.value)

In [198]:

handle_blank(wb, '空格')

修改日期和时间格式

有时候,我们需要对表格中时间相关的单元格进行格式修改,这里需要用到Python中时间模块datetime,将需要的格式进行拼接后,用strftime进行转换。

假设这里我们想把之前简单的1/11月日格式,更改为年月日的样式,中间加上分隔符/或-,就需要用"%x"或"%Y-%m-%d"来进行操作了。注意这里的%加字母都是官方定义好的格式而已,我们用到时候进行拼接,传给函数就可以了。

具体更多的拼接格式如下:

In [199]:

import datetime

In [209]:

d=datetime.datetime(2019,1,11)

In [203]:

d.strftime("%x")

Out[203]:

'01/11/19'

In [205]:

d.strftime("%Y-%m-%d")

Out[205]:

'2019-01-11'

研究完成后,我们编写函数。

首先需要用m, d = cell.value.split('/')把之前简单的日期进行分割,得到m,代表月份和日期,然后用datetime进行转换,生成时间相关的对象day,注意里面的参数是数字,所以用int转换,最后把day进行格式化输出。编写函数后,一定记得测试。

In [218]:

def handle_time(wb, sheetname):

"""

按列循环, 通过参数确认目标

"""

print(f'开始处理工作表:{sheetname}'.center(18, '-'))

sheet = wb[sheetname]

for col in sheet.iter_cols(max_col=1, min_row=2): # 找到时间的列, 第一列,从第二行开始

for cell in col:

print('修改前:', cell.value, end='')

m, d = cell.value.split('/')

day = datetime.datetime(2019, int(m), int(d))

cell.value = day.strftime("%Y-%m-%d")

print('修改后-》》',cell.value)

In [220]:

wb = load_data()

handle_time(wb, '时间')

save_as(wb)

修复数字和符号

接下来,处理数字和符号相关的操作。加入我们之前的价格,很多是有小数点的,这时候还想保存两位小数,并加上人民币符号为前缀。就需要新的一波研究了。

有小数点,一是要保证位数,我们这里要求2位,二是要对多余的位数四舍五入。可以有以下俩个方式完成,一个用Decimal一个用round,两个的区别是Decimal("0.00")指定位数后,会自动补0,而round遇到0就自动舍掉了。而且round在四舍五入的计算中,还有点特殊。具体可查看官方文档。

我们这里用Decimal来完成函数内相关操作。记得测试啊!

In [227]:

from decimal import Decimal

In [240]:

a = 3.1

b=Decimal(a).quantize(Decimal("0.00"))

print(b)

3.10

In [244]:

round(a,2) # 位数自动省略0

Out[244]:

3.1

In [247]:

def handle_num(wb, sheetname):

"""

按列循环, 通过参数确认目标

"""

print(f'开始处理工作表:{sheetname}'.center(18, '-'))

sheet = wb[sheetname]

for col in sheet.iter_cols(min_col=3, max_col=3, min_row=2): # 找到时间的列, 第一列,从第二行开始

for cell in col:

print('修改前:', cell.value, end='')

# cell.value = round(float(cell.value), 3)

cell.value = '¥' + str(Decimal(cell.value).quantize(Decimal("0.00")))

print('修改后-》》',cell.value)

In [249]:

wb = load_data()

handle_num(wb, '数字符号')

save_as(wb)文源网络,仅供学习之用,侵删。

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!

https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本源码是一个使用Python编写的自动化办公工具,旨在帮助用户在Excel表格中自动合并具有相同内容的相邻单元格。通过使用这个工具,用户可以节省大量的时间和精力,提高工作效率。该工具的核心功能是遍历Excel表格中的每个单元格,检查其上下左右相邻的单元格是否具有相同的内容。如果发现相邻单元格的内容相同,则将这些单元格合并为一个更大的单元格。这样,用户可以更清晰地查看和分析数据,而不会被重复的信息干扰。此外,该工具还提供了一些其他实用的功能,如:支持多种文件格式:除了常见的Excel文件(如.xlsx和.xls),该工具还支持其他表格文件格式,如CSV和TSV。自定义合并规则:用户可以根据需要设置合并规则,例如只合并特定的,或者根据特定的条件进合并。批量处理:该工具可以一次性处理多个文件,方便用户对大量数据进处理。保存和导出:处理完成后,用户可以将结果保存到原始文件中,或者导出为新的Excel文件。简单易用的界面:该工具提供了一个简洁的图形用户界面,用户只需点击几下鼠标即可完成操作。总之,这个Python自动化办公源码是一个非常实用的工具,可以帮助用户快速高效地处理Excel表格中的数据。无论是需要进数据分析的专业人士,还是需要处理大量表格数据的政人员,这个工具都能为他们提供极大的便利。重新回答||
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进课程实践、课外项目或毕业设计。通过分析和运源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值