Python将两个string之间的文本提取到Excel中

我有这样的文本文件

blablablabla blablablabla Start Hello World End blablabla 

我想提取开始和结束之间的string,并将它们写入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() 

但是它只返回一个空的工作簿。 我究竟做错了什么?

我没有很多与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) 

编辑(在一个单元格中写入所有行):

您必须创build新的variables,您可以添加您的行,并在最后您将stringvariables分配给工作表中的单元格。

 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) 

首先,你似乎总是写在第一行

其次,计数从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() 

数据正在写入单元格,但是一个问题是, worksheet.write()将覆盖单元格的内容,因此只有写入的最后一个项目才会出现。

你可以通过累积StartEnd之间的行来解决这个问题,然后用一个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() 

这里的行被累积到一个列表中。 当看到一个结束行时,该列表的内容用新行连接(可以用另一个字符replace,例如空格)并写入单元格。