用python快速做表_用Python快速处理表格,让你快人一步两步三四部

日常工作中表格处理时非常令人头疼的一个部分,

概念

CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件,它的使用是比 较广泛的(Kaggle上一些题目提供的数据就是csv格式),csv虽然使用广泛,但却没有通用的标准,所以在处理csv 格式时常常会碰到麻烦,幸好python内置了csv模块。下面简单介绍csv模块中最常用的一些函数。

读表格

import csv

from collections import namedtuple

with open('accessinfo_base.csv',encoding='utf8') as f:

f_csv = csv.reader(f)

headers = next(f_csv)

print('表头',headers)

for row in f_csv:

print(row)

## named tuple

with open('accessinfo_base.csv',encoding='utf8') as f:

f_csv = csv.reader(f)

headers = next(f_csv)

Row = namedtuple('Row',headers)

for r in f_csv:

row = Row(*r)

print(row,row.role,row.area)

## 读取到字典去中

with open('accessinfo_base.csv',encoding='utf8') as f:

f_csv = csv.DictReader(f)

for r in f_csv:

print(r)

写表格

## 读取到字典去中

with open('accessinfo_base.csv',encoding='utf8') as f:

f_csv = csv.DictReader(f)

for r in f_csv:

print(r)

## 写入csv,先创建一个csv的writer对象

with open('test1.csv', 'w', encoding='utf8') as f:

headers = ['ip', 'area', 'role']

rows = [['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS']]

csv_writer = csv.writer(f)

csv_writer.writerow(headers)

csv_writer.writerows(rows)

# newline很重要,不然会出现间隔的空白行,w代表写文件。

with open('test2.csv', 'w', encoding='utf8',newline='') as f:

headers = ['ip', 'area', 'role']

rows = [['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS'], ['127.0.0.1', 'A', 'AS']]

csv_writer = csv.writer(f,delimiter='\t')

csv_writer.writerow(headers)

csv_writer.writerows(rows)

## 字典的方式写入

with open('test3.csv', 'w', encoding='utf8',newline='') as f:

headers = ['ip', 'area', 'role']

rows = [{

'ip': '12',

'area': 'a',

'role': 'as'

},

{

'ip': '12',

'area': 'a',

'role': 'as'

},

{

'ip': '12',

'area': 'a',

'role': 'as'

},

]

csv_writer = csv.DictWriter(f,headers)

csv_writer.writeheader()

csv_writer.writerows(rows)

xlrd

读Excel文件

支持xls、xlsx

import xlrd

def print_excel(filePath):

myWbook = xlrd.open_workbook(filePath)

mySheet = myWbook.sheet_by_index(0)

# 也可以使用函数mySheet = myWbook.sheet_by_name('sheet1')

nrows = mySheet.nrows # 行数

ncols = mySheet.ncols # 列数

i = 1

err_num=0

while i < nrows:

try:

print(mySheet.row_values(i))

a = mySheet.row(i)[0].value

b = mySheet.row(i)[1].value

c = mySheet.row(i)[2].value

print(a,b,c)

i = i + 1

except Exception as e:

print(e)

err_num = err_num + 1

i = i + 1

return err_num # success def print_excel_2(filePath):

myWbook = xlrd.open_workbook(filePath)

mySheet = myWbook.sheet_by_index(0)

# 也可以使用函数mySheet = myWbook.sheet_by_name('sheet1')

cell_type = mySheet.cell(1,2).ctype

## 1为字符串、2为数字 3为日期

print(cell_type)

#取某个位置的值

print(mySheet.cell(1,1).value)

print(mySheet._cell_values)

##读取整个cell if __name__ == '__main__':

print_excel_2('accessinfo_base.xls')

pandas

pandas是一款数据处理的工具,基于Numpy去编写的。提供了大量快捷处理数据的函数和方法。

本次我使用它在读写表格的一些便捷的方法。

读表格

首先可以先创建一个excel文件当作实验数据,名称为example.xlsx,内容如下:

读取并打印

注意 sheet名要对应起来。

# coding:utf-8

import pandas as pd

data = pd.read_excel('example.xlsx', sheet_name='Sheet1')

print(data)

这里使用了read_excel()方法来读取excel,来看一个read_excel()这个方法的API,这里只截选一部分经常使用的参数:

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None)

这里主要参数为io,sheet_name,header,usecols和names

io:excel文件路径

sheet_name:返回指定的sheet,如果将sheet_name指定为None,则返回第一页,如果需要返回多个表,可以将sheet_name指定为一个列表,例如['sheet1', 'sheet2']

header:指定数据表的表头,默认值为0,即将第一行作为表头。如果表中无表头,此值应为None,对应的表头会用索引表示,也可搭配names,指定表头。

usecols:读取指定的列,例如想要读取第一列和第二列数据:

pd.read_excel("example.xlsx", sheet_name=None, usecols=[0, 1])

index_col 指定某列为索引

遍历所有行

# coding:utf-8

import pandas as pd

data = pd.read_excel('example.xlsx', )

print(data)

for index, row in data.iterrows():

print(row['name'], row['age'], row['gender'])

print(row[0], row[1], row[2])

以转换dict的list的方式读取

# coding:utf-8

import pandas as pd

data = pd.read_excel('example.xlsx', )

data = data.to_dict(orient='records')

print(data)

写表格

# coding:utf-8

import pandas as pd

raw_data = [{'name': 'John', 'age': 30, 'gender': 'male'}, {'name': 'Mary', 'age': 22, 'gender': 'female'}, {'name': 'Smith', 'age': 32, 'gender': 'male'}]

data = pd.DataFrame(raw_data)

print(data)

data.to_excel('example_output.xlsx', sheet_name='Test01', index=False, header=True)

数据的计算

我们只写数据计算部分,不去写读取和写入的部分。

有时候我们需要处理表格中的内容,比如根据表格中的多项字段生成一个新的字段,得到一个新的结论。

比如有时候考试题出的太难了,大家都不及格,我们想让大家都及格,可以这样写。我们没有采用乘以10开根号的办法,我们简单点。

import pandas as pd

raw_data = [{'name': 'John', 'score': 30, 'gender': 'male'}, {'name': 'Mary', 'score': 22, 'gender': 'female'},

{'name': 'Smith', 'score': 32, 'gender': 'male'}]

data = pd.DataFrame(raw_data)

print(data)

def jige(row):

print(row)

if row['score'] < 60:

return 60

return row['score']

data['new_score'] = data.apply(jige, axis=1)

print(data)

这个代码的读取和写入我们省略了,大家可以自己补充上。

通过在数据里调用我们的函数,我们成功让大家都及格了。

我们想像下运维中的场景,比如根据端口类型、描述得出某些结论即一个新的字段。

计算此端口上是否有crc err数,甚至可以根据以往记录去计算crc的增长。

判断某些指标是否超过阈值,得出一个个的结论,即很多字段,加之组合生成一个巡检报告。

真的是抛砖。

还是希望分享一些方法,大家学会点基础的后,自己开脑洞!

好了关于Python的入门、读写文件、表格操作我们就讲完了!欢迎大家关注公众号,后续的分享会紧贴网络运维。

后续我们会聚焦网络运维,讲解一些能够提高我们运维效率的工具、技术、代码等等,讲解一些在云计算时代所需要了解的开源组件。

大家有什么想了解的也可以私信我,我会分享我所了解的部分~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值