【发布时间】:2016-07-18 18:45:15
【问题描述】:
我正在从in.txt 读取数据并将其中的特定行写入Sample.xlsx。我在包含start 和end 的行之间查找数据,并在解析这部分输入数据时设置Flag。设置Flag时,每当遇到NAME:和AGE:在行中,都需要分别写入C列和D列(额外信息:输入文件有以下模式:第一行包含NAME,next行包含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')
为长篇大论道歉。但请让我知道我在这里做错了什么。
感谢阅读。
______________________________________ Edit-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
【问题讨论】:
-
我怀疑您的计数器有问题。您应该添加一些调试代码,看看它是否按照您的意愿运行。
-
我也是这么想的。但是我将
ws['C'+str(i)] = lines更改为ws['C'+str(i)] = 'hello',对于D 列也是如此。这样做之后,'hello'在一个单元格中只出现一次。当我将当前lines分配给该单元格时,就会出现问题。它只会重复多次。 -
我也在相同的条件语句下将姓名和年龄写入文本文件。并且文本文件输出没有任何重复。
-
写入其他文件不涉及计数器。就像我说的,添加一些调试代码,看看是在什么条件下编写的。
-
是的,文本输出不涉及计数器。仍然当我分配像
'hello'这样的字符串而不是lines时,它不会在单元格内重复。我会继续努力的。
标签: python excel python-2.7 openpyxl