我有一个像这样的文本文件
blablablabla
blablablabla
Start
Hello
World
End
blablabla
我想在Start和End之间提取字符串并将它们写入Excel单元格。到目前为止,我的代码看起来像这样:
import xlsxwriter
workbook = xlsxwriter.Workbook("Test1.xlsx")
worksheet = workbook.add_worksheet()
flist = open("TextTest.txt").readlines()
parsing = False
for line in flist:
if line.startswith("End"):
parsing = False
if parsing:
worksheet.write(1,1,line)
if line.startswith("Start"):
parsing = True
workbook.close()
但是它只返回一个空的工作簿。我做错了什么?
答案 0 :(得分:1)
首先,您似乎总是在第1行写作
其次,数字从0开始
通过这两个小的改动,这应该做你想要的:
parsing = False
linewrite=0
for line in liste:
if line.startswith("End"):
parsing = False
if parsing:
worksheet.write(linewrite,0,line)
print line,
linewrite+=1
if line.startswith("Start"):
parsing = True
workbook.close()
答案 1 :(得分:1)
正在将数据写入单元格,但一个问题是worksheet.write()
将覆盖单元格的内容,因此只会出现最后写入的项目。
您可以通过累积Start
和End
之间的行,然后用一个worksheet.write()
写一行来解决此问题:
import xlsxwriter
workbook = xlsxwriter.Workbook("Test1.xlsx")
worksheet = workbook.add_worksheet()
with open("TextTest.txt") as data:
lines = []
for line in data:
line = line.strip()
if line == "Start":
lines = []
elif line == "End":
worksheet.write(0, 0, '\n'.join(lines))
workbook.close()
这里的行被累积到一个列表中。当看到结束行时,该列表的内容将与新行连接(您可以将其替换为另一个字符,例如空格)并写入单元格。
答案 2 :(得分:1)
我在python中没有很多excel内容的经验但是你可以尝试使用openpyxl,我发现它更容易理解。
解决您的问题:
import openpyxl
wb = openpyxl.Workbook()
destination_filename = "my.xlsx"
ws = wb.active
ws.title = "sheet1"
flist = open("text.txt").readlines()
row = 1
column = 'A'
parsing = False
for i in flist:
if i.startswith("End"):
parsing = False
if parsing:
coord = column + str(row)
ws[coord] = i
row += 1
if i.startswith("Start"):
parsing = True
wb.save(filename = destination_filename)
编辑(在一个单元格中写入所有行):
您必须创建可以添加行的新变量,最后您将字符串变量分配给工作表中的单元格。
String=""
for i in flist:
if i.startswith("End"):
parsing = False
if parsing:
i = i.strip("\n")
String += str(i) + ","
if i.startswith("Start"):
parsing = True
ws['A1'] = String
wb.save(filename = destination_filename)