我正在从in.txt
读取数据并将特定行写入Sample.xlsx
。我在包含start
和end
的行之间点击数据,并在解析此部分输入数据时设置Flag
。设置Flag
时,每当我在行中遇到NAME:
和AGE:
时,都需要分别写入C和D列(额外信息:输入文件具有以下模式:第一行包含NAME
,下一行包含AGE
后跟一个空行,并重复此模式。
start is here
NAME:Abe
AGE:40
NAME:John
AGE:20
...
end
输入与上述类似。现在的问题是,我有大约1000条这样的线,所以大约有333个名字,年龄。当我在运行代码后打开Excel工作表时,我看到C2重复了NAME:Abe
次21次。 D2的AGE:40
重复了21次。我将输入减少到100行,重复减少到3.我似乎无法弄清楚为什么会发生这种情况。当我改为10行,即只有3个名字和年龄时,这个问题并没有发生。 C2只有一个名字,C3也有一个名字。
from openpyxl import Workbook, load_workbook
fin = open('in.txt')
fout1 = open('name.txt','w')
fout2 = open('age.txt','w')
wb = Workbook()
ws = wb.active
i = 2
Flag = False
for lines in fin:
if 'start' in lines:
Flag = True
continue
if Flag and 'end' in lines:
break
if Flag:
if 'NAME:' in lines:
fout1.write(lines)
ws['C'+str(i)] = lines
elif 'AGE:' in lines:
fout2.write(lines)
ws['D'+str(i)] = lines
i += 1
wb.save(filename = 'Sample.xlsx')
为长篇大论道歉。但是,请让我知道我在这里做错了什么。
感谢阅读。
______________________________________编辑-1 ________________________________
我只是尝试使用以下最小代码从文本文件基本写入excel单元格。
for line in fin:
ws['C'+str(i)] = line
i += 1
这也会产生相同的错误。线在单元格内多次写入。并且它重复的次数会根据输入文本文件中的行数而增加。
__________________________________编辑-2 __________________________________
我似乎已经修复了这个问题,但仍然不知道为什么会修复它。由于字符串打印没有任何问题,我删除了lines
中的最后一个字符,该字符应该是下一行字符。现在一切都按预期工作了。我不确定这是否是一个正确的解决方案,或者为什么会发生这种情况。无论如何,下面给出的代码似乎解决了这个问题。
for line in fin:
ws['C'+str(i)] = line[:-1]
i += 1
答案 0 :(得分:1)
尝试避免在Python中使用计数器是可能的,也是可取的。以下代码更具表现力和可维护性。
from openpyxl import Workbook, load_workbook
fin = open('in.txt', 'r')
wb = Workbook()
ws = wb.active
ws.append([None, None, "NAME", "AGE"])
Flag = False
for line in fin.readlines():
if line.startswith("start"):
Flag = True
row = [None, None, None, None]
elif line.startswith("end"):
break
elif Flag:
if line.startswith('NAME:'):
row[2] = line[5:]
elif line.startswith('AGE:'):
row[3] = int(line[4:])
ws.append(row)
wb.save(filename = 'Sample.xlsx')
fin.close()