日志文件内容如下:
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/
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
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)
注:当一个工作表被创建是时,其中不包含单元格。只有当单元格被获取是才被创建。这种方式我们不会创建我们从不会使用的单元格,从而减少了内存消耗。
使用切片获取多个单元格
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)