首页 > 其他 > 详细

将excel中某列数据中,含有指定字符串的记录取出,并生成用这个字符串命名的txt文件

时间:2019-09-05 20:21:20      阅读:504      评论:0      收藏:0      [点我收藏+]
Python 一大重要的功能,就是可处理大量数据,那分不开的即是使用Excel表格了,这里我做下学习之后的总结,望对我,及广大同仁们是一个帮助
Python处理Excel数据需要用到2个库:xlwtxlrdxlwt库负责将数据导入生成Excel表格文件,而 xlrd库则负责将Excel表格中的数据取出来。

xlrd 库读取Excel的数据也是轻轻松松,先来看下实现代码
import xlrd, os

wb = xlrd.open_workbook(./test.xls)
# 获取列表1
sheet1 = wb.sheet_by_index(0)

# 根据循环取数据
for x in range(wb.nsheets):
    p = wb.sheets()[x].name.encode(utf-8)
    print("Sheets Number(%s): %s" % (x, p.decode(utf - 8)))

# 总行数
total_rows = sheet1.nrows

# 总列数
total_cols = sheet1.ncols
print("行数:%d 列数:%d" % (total_rows, total_cols))
# input the check column
cols_num = int(input(要检查哪一列请输入数值(第一列数值为0):))
while cols_num + 1 > total_cols:
    cols_num = int(input(您的号码超出范围,请重新输入:))
# 输入搜索字符串和列
txt_text = input(匹配字符串:)
# 找到 列 并保存到txt
txt_filename = txt_text + .txt
file_handle = open(txt_filename, w)
# find the rows which you want to select and write to a txt file
# 我的表格是从第10行才有的正经数据,所以从第10行开始
for i in range(10, total_rows):
    # 取出第i行 第 cols_num 列的数据
    cell_value = sheet1.cell_value(i, cols_num)
    # 如果用户输入的字符串在这个单元格数据里包含 则提出该行数据
    if txt_text in str(cell_value):
        outputs = sheet1.row_values(i)
        for j in outputs:
            file_handle.write(%s  % (j))
        file_handle.write(%s % (os.linesep))
file_handle.close()
总结一下,分为一下几步:
  1. 首先通过xlrd库的open_workbook方法打开Excel文件(我这里的test.xls,是已存在数据的excel表格)
  2. 然后通过sheet_by_index方法获取表
  3. 然后分别获取表的行数和列数,便于后面循环遍历
  4. 根据列数和行数,循环遍历,根据某列单元格内的数据,即通过cell_value方法获取每个单元格中的数据,匹配到我手写的字符串,如符合,则取出该行所有数据,再次循环该行数据,将其写入到记事本中 os.linesep 每行数据写入后,换行写入

工作表的相关操作

获取一个工作表,有多种方式

# 通过索引
sheet1 = wb.sheets()[0]
sheet1 = wb.sheet_by_index(0)

# 通过名字
sheet1 = wb.sheet_by_name(test)

# 获取所有表名sheet_names = wb.sheet_names()

获取某一行或某一列的所有数据

# 获取行中所有数据,返回结果是一个列表
tabs = sheet1.row_values(rowx=0, start_colx=0, end_colx=None)
# 返回一行一共有多少数据
len_value = sheet1.row_len(rowx=0)
row_values的三个参数分别是:行号、开始的列和结束的列,其中结束的列为None表示获取从开始列到最后的所有数据
类似的还有获取某一列的数据
 cols = sheet1.col_values(colx=0, start_rowx=0, end_rowx=None) 

处理时间数据

时间数据比较特殊,没发直接通过上面的cell_value方法获取。需要先转换为时间戳,然后再格式化成我们想要的格式。

比如要获取Excel表格中,格式为2019/8/13 20:46:35的时间数据

# 获取时间
time_value = sheet1.cell_value(3, 0)

# 获取时间戳
time_stamp = int(xlrd.xldate.xldate_as_datetime(time_value, 0).timestamp())
print(time_stamp)

# 格式化日期
time_rel = time.strftime("%Y/%m/%d", time.localtime(time_stamp))
print(time_rel)

基本也是三步走:

  1. 通过cell_value方法获取时间值
  2. 然后通过xldate_as_datetime方法获取时间戳
  3. 然后格式化一下

 

将excel中某列数据中,含有指定字符串的记录取出,并生成用这个字符串命名的txt文件

原文:https://www.cnblogs.com/Ares-zjs/p/11469024.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!