如果行为空,如何检查每一列?

How to check for each column if row is empty?

我创建了一个从 .txt 文件中检索数据的简单程序。 .txt文件的一小部分:

(和)之间的4位数字和<和>之间的十六进制数是数据,我指的是。 切片后,我想将数据写入 excel 文件。

我写了(一个丑陋的)代码,它会记住行号并将数据写入下面每列的单元格(总共 9 列)

是否有更好的方法来获得相同的结果?我想改进。

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')

可以通过使用列表而不是 9 个变量来减少代码:

试试这个代码:

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')