用python将txt文件中的内容导入到excel文件中

背景

  • 日志文件中的内容不方便阅读统计,需要用excel表格的形式显示出来

日志文件内容如下:
info***LCAM_SC.DM_RP_DIS_DEVICE_TEMP*1*1*0*0*0*0*N*Y*/data2/20200514114048/OGG_ZC_SZ09_12/DM_RP_DIS_DEVICE_TEMP/

  • 根据日志文件创建excel表头
TABLE PN SN FN ZN ROWS SIZE(MB) SC PK PATH1 DATE IP FLAG REMARK

实现代码

import openpyxl
import codecs
import time
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from tqdm import tqdm

print('*' * 60)
print('欢迎来到txt导入excel小程序!!!'.center(40))
print('*' * 60)

#########定义导入函数##########
def txt_to_excel():
    while True:
        try:
            outputfile = input('请输入需要导出的txt文件名(注意文件格式为txt):').strip()
            inputfile = input('请输入需要导入的excel文件名(注意文件格式为xlsx):').strip()
            filename = outputfile + '.txt'
            outfile = inputfile + '.xlsx'
            sheet_name = input('请输入你需要导入的sheet名:').strip()
            rn = input('请输入需要从第几行开始写入数据(输入数字):').strip()
            print('读取%s文件中,请稍等.........' % filename)
            ###打开excel文件和对应的工作表###
            work_book = load_workbook(outfile)
            write_sheet = work_book[sheet_name]
            row = int(rn) - 1
            ###打开文本文件###
            file = codecs.open(filename, 'r')
            ###过虑文本文件内容###
            total_row = 0
            print('------写入数据------\n')
            for line in tqdm(file,desc='进度'):
                row += 1
                total_row += 1
                line = line.strip('info***\n')
                line = line.split('*')
                col = 0
            ###读入excel表格中###
                for i in range(len(line)):
                    col += 1
                    if 1 <= i <= 6:
                        v = int(line[i])
                        write_sheet.cell(column=col, row=row, value=v)
                    else:
                        write_sheet.cell(column=col, row=row, value=line[i].format(get_column_letter(col)))
            ###保存excel文件###
            print('【写入完成】\n')
            print('------保存数据------\n')
            work_book.save(outfile)
            print('【已保存】')
            print('数据保存中......\n')
            time.sleep(1)
            print("********文件%s已新增>%d<条数据********" % (outfile, total_row))
            time.sleep(0.5)
        except (KeyError,ValueError,OSError) as e:
            print('【无效的输入: %s】' % e)
            exit()
        except (KeyboardInterrupt, EOFError):
            print('【下次见】')
            exit()
        while True:
            try:
                prompt = int(input('''请问需要继续导入数据吗?
1.继续
0.结束
请选择(1/0):''').strip())
                if prompt not in [1, 0]:
                    print('【无效输入,请重试】')
                    continue
                if prompt == 1:
                    break
            except ValueError as e:
                print('【继续导入失败,请输入数字: %s】' % e)
                exit()
            except (KeyboardInterrupt, EOFError):
                print('【结束继续导入,下次见】')
                exit()
            print('*' * 50)
            print('*     恭喜你,文件%s已经就绪!!!    *' % outfile)
            print('*' * 50)
            exit()

if __name__ == '__main__':
    txt_to_excel()

效果如下


C:\Users\DELL\Desktop>python init_excel_v1.2.py
************************************************************
          欢迎来到txt导入excel小程序!!!
************************************************************
请输入需要导出的txt文件名(注意文件格式为txt):a
请输入需要导入的excel文件名(注意文件格式为xlsx):b
请输入你需要导入的sheet名:KKX04
请输入需要从第几行开始写入数据(输入数字):44
读取a.txt文件中,请稍等.........
------写入数据------

进度: 2416it [00:00, 8941.67it/s]
【写入完成】

------保存数据------

【已保存】
数据保存中......

********文件b.xlsx已新增>2416<条数据********
请问需要继续导入数据吗?
1.继续
0.结束
请选择(1/0):0
**************************************************
*     恭喜你,文件b.xlsx已经就绪!!!    *
**************************************************

相关模块说明

  • openpyxl

    1. 创建一个工作簿

    wb = Workbook()
    2. 调用一张工作表

    ws = wb.active
    3. 新建一张表

    ws1 = wb.create_sheet() #默认插在工作簿末尾

    ws2 = wb.create_sheet(0) # 插入在工作簿的第一个位置
    4. 工作表命名(系统自动按照序列依次命名 Sheet, Sheet1, Sheet2, …)

    ws.title = “New Title”
    5. 通过workbook的key 方法得到该工作表

    ws3 = wb[“New Title”]
    注:也可以循环得到所有的工作表

    for sheet in wb:
    
        print(sheet.title)
    

    6.使用一个单元格,单元格可以直接根据他们的索引直接获得

    c = ws[‘A4’]

    单元格的值也可以直接赋值

    ws[‘A4’] = 4

    还可以openpyxl.worksheet.Worksheet.cell()方法获取单元格

    c = ws.cell(‘A4’)

    也可以根据行列值获取单元格

    d = ws.cell(row = 4, column = 2)

    遍历单元格

    for i in range(1,101):
          for j in range(1,101):
               ws.cell(row = i, column = j)
    

    注:当一个工作表被创建是时,其中不包含单元格。只有当单元格被获取是才被创建。这种方式我们不会创建我们从不会使用的单元格,从而减少了内存消耗。

    1. 使用多个单元格

    使用切片获取多个单元格

    cell_range = ws[‘A1’:‘C2’]

    9.读取工作表

    wb2 = openpyxl.load_workbook(‘test.xlsx’)

    10.保存工作薄

    wb.save(‘test.xlsx’)

  • codecs

用codecs提供的open方法来指定打开的文件的语言编码,它会在读 取的时候自动转换为内部unicode

file = codecs.open(filename, 'r')
  • tqdm

    显示程序运行的进度,参考https://github.com/tqdm/tqdm

补充


将txt文件内容导出到csv文件中

实现代码

import codecs
import csv
import time
print('欢迎来到txt导入excel小程序!!!')
time.sleep(1)
#######如果没有空表先创建一个有表头的空表##########
def new_excel():
    judge = input('''请问是否已经创建了csv表?
1.已创建,则追加
0.未创建,则新建
请输入(1/0):''').strip()
    if int(judge) == 0:
        with open(file_excel, 'a', newline='') as csvfile:
#           用csv.writer()函数创建一个writer对象。
             writer = csv.writer(csvfile, dialect='excel')
             header=['TABLE', 'PN', 'SN', 'FN', 'ZN', 'ROWS', 'SIZE(MB)', 'SC','PK','PATH1','DATE','IP','FLAG','REMARK']
             writer.writerow(header)

########将txt文件内容导出到excle表中########
def txt_to_excel(filename,outfile):
    fr = codecs.open(filename, 'r')
    with open(outfile, 'a', newline='')as csvfile:
        writer = csv.writer(csvfile, dialect='excel')
        for line in fr:
            line = line.strip('info***\n')
            line = line.split('*')
            # print(line)
            writer.writerow(line)
    print('恭喜你,你要的文件' + file_excel + '已经就绪')

file_txt = input('输入txt文件名(注意文件必须在相对路径,不漏了后缀.txt):')
file_excel = input('输入csv文件名(注意不要漏了后缀.csv):')
if __name__ == '__main__':
    # 我的默认文件名为 'info_log.txt'
    new_excel()
    txt_to_excel(file_txt,file_excel)

你可能感兴趣的:(python,运维)