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()
将覆盖单元格的内容,因此只有写入的最后一个项目才会出现。
你可以通过累积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()
这里的行被累积到一个列表中。 当看到一个结束行时,该列表的内容用新行连接(可以用另一个字符replace,例如空格)并写入单元格。