Python 如果行为空,如何检查每列?
我创建了一个从.txt文件检索数据的简单程序。.txt文件的一小部分: (和)之间的4位数字和<和>之间的十六进制数字就是我所指的数据。 切片后,我想将数据写入excel文件 我编写了(一个难看的)代码,可以记住行号,并将数据写入下面每列的一个单元格(总共9列) 有没有更好的方法获得同样的结果?我想提高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
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!非常有用