Reputation: 37
I created an simple program that retrieves data from a .txt file. A small part of the .txt file:
The 4 digit number between the ( and ) and the hexadecimal between < and > is the data, I am referring to. After I sliced it, I want to write the data into an excel file.
I wrote (an ugly) code that will remember the row number and write the data into a cell below for each column (9 columns in total)
Is there a better way to get the same result? I would like to improve.
import openpyxl
infile = open('test.txt')
s = infile.readlines()
wb = openpyxl.load_workbook(filename='Main.xlsx')
ws = wb.active
VariableRow1 = 2
VariableRow2 = 2
VariableRow3 = 2
VariableRow4 = 2
VariableRow5 = 2
VariableRow6 = 2
VariableRow7 = 2
VariableRow8 = 2
VariableRow9 = 2
for i in range(len(s)):
if '<' in s[i] and '(' in s[i]:
PijlOpen = s[i].find('<')
PijlDicht = s[i].find('>')
HaakjeOpen = s[i].find('(')
HaakjeDicht = s[i].find(')')
Number = (s[i])[HaakjeOpen + 1:HaakjeDicht]
Number = Number.replace('0', '')
Value = (s[i])[PijlOpen + 1:PijlDicht]
Value = Value.replace(' ', '')
Value = bytes.fromhex(Value).decode('utf-8')
Number = int(Number)
if Number == 1:
if ws.cell(row=VariableRow1, column=Number).value != None:
VariableRow1 += 1
cell = ws.cell(row=VariableRow1, column=Number)
cell.value = Value
if Number == 2:
if ws.cell(row=VariableRow2, column=Number).value != None:
VariableRow2 += 1
cell = ws.cell(row=VariableRow2, column=Number)
cell.value = Value
if Number == 3:
if ws.cell(row=VariableRow3, column=Number).value != None:
VariableRow3 += 1
cell = ws.cell(row=VariableRow3, column=Number)
cell.value = Value
if Number == 4:
if ws.cell(row=VariableRow4, column=Number).value != None:
VariableRow4 += 1
cell = ws.cell(row=VariableRow4, column=Number)
cell.value = Value
if Number == 5:
if ws.cell(row=VariableRow5, column=Number).value != None:
VariableRow5 += 1
cell = ws.cell(row=VariableRow5, column=Number)
cell.value = Value
if Number == 6:
if ws.cell(row=VariableRow6, column=Number).value != None:
VariableRow6 += 1
cell = ws.cell(row=VariableRow6, column=Number)
cell.value = Value
if Number == 7:
if ws.cell(row=VariableRow7, column=Number).value != None:
VariableRow7 += 1
cell = ws.cell(row=VariableRow7, column=Number)
cell.value = Value
if Number == 8:
if ws.cell(row=VariableRow8, column=Number).value != None:
VariableRow8 += 1
cell = ws.cell(row=VariableRow8, column=Number)
cell.value = Value
if Number == 9:
if ws.cell(row=VariableRow9, column=Number).value != None:
VariableRow9 += 1
cell = ws.cell(row=VariableRow9, column=Number)
cell.value = Value
wb.save(filename='Main.xlsx')
print ('Finished')
Upvotes: 0
Views: 676
Reputation: 11342
You code can be reduced by using a list instead of the 9 variables:
Try this code:
import openpyxl
infile = open('test.txt')
s = infile.readlines()
wb = openpyxl.load_workbook(filename='Main.xlsx')
ws = wb.active
VariableRow = [2]*9 # index 0-8
for i in range(len(s)):
if '<' in s[i] and '(' in s[i]:
PijlOpen = s[i].find('<')
PijlDicht = s[i].find('>')
HaakjeOpen = s[i].find('(')
HaakjeDicht = s[i].find(')')
Number = (s[i])[HaakjeOpen + 1:HaakjeDicht]
Number = Number.replace('0', '')
Value = (s[i])[PijlOpen + 1:PijlDicht]
Value = Value.replace(' ', '')
Value = bytes.fromhex(Value).decode('utf-8')
Number = int(Number)
if number in range(1,10): # 1-9
if ws.cell(row=VariableRow[number-1], column=Number).value != None:
VariableRow[number-1] += 1
cell = ws.cell(row=VariableRow[number-1], column=Number)
cell.value = Value
wb.save(filename='Main.xlsx')
print ('Finished')
Upvotes: 1