Python将两个字符串之间的文本提取到Excel中

时间:2016-09-03 12:37:47

标签: python excel text

我有一个像这样的文本文件

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()

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

3 个答案:

答案 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()将覆盖单元格的内容,因此只会出现最后写入的项目。

您可以通过累积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()

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

答案 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)