Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果行为空,如何检查每列?_Python_Excel_Openpyxl - Fatal编程技术网

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

Python 如果行为空,如何检查每列?,python,excel,openpyxl,Python,Excel,Openpyxl,我创建了一个从.txt文件检索数据的简单程序。.txt文件的一小部分: (和)之间的4位数字和之间的十六进制数字就是我所指的数据。 切片后,我想将数据写入excel文件 我编写了(一个难看的)代码,可以记住行号,并将数据写入下面每列的一个单元格(总共9列) 有没有更好的方法获得同样的结果?我想提高 import openpyxl infile = open('test.txt') s = infile.readlines() wb = openpyxl.load_workbook(fil

我创建了一个从.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')
导入openpyxl
infle=open('test.txt')
s=infle.readlines()
wb=openpyxl.load_工作簿(filename='Main.xlsx')
ws=wb.active
变量行1=2
变量Row2=2
变量ROW3=2
变量ROW4=2
变量行5=2
变量行6=2
变量行7=2
变量row8=2
变量ROW9=2
对于范围内的i(len(s)):

如果“可以使用列表而不是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')
导入openpyxl
infle=open('test.txt')
s=infle.readlines()
wb=openpyxl.load_工作簿(filename='Main.xlsx')
ws=wb.active
VariableRow=[2]*9#索引0-8
对于范围内的i(len(s)):

通常,如果在循环中使用3-4个以上的if语句,那么最好改用列表来定义循环中的if语句。您能解释一下您的意思吗?我如何使用列表来定义if语句?@Mike67下面的回答就是这样做的。其思想是,如果您有一个变量列表,您可以使用该列表的索引来存储该数据。我们知道我们想要列表的哪个索引,所以现在不必用if语句检查所有变量的索引是否正确!哇哦,太聪明了!非常感谢你们两位,现在我明白了:一般来说,使用正则表达式处理日志文件是一个不错的选择。一旦你算出正则表达式,那可能需要一段时间!,剩下的代码可以简单得多。变量row1不正确或者我遗漏了什么?cell=ws.cell(row=VariableRow1,column=Number)谢谢@Mike67!非常有用