2016-09-03 7 views
0

Ich habe eine Textdatei wie diesePython Extract Text zwischen zwei Zeichenfolgen in Excel

blablablabla 
blablablabla 
Start 
Hello 
World 
End 
blablabla 

ich die Saiten zwischen Start und Ende extrahieren möchten und sie in eine Excel-Zelle zu schreiben. Mein Code sieht so weit aus:

Allerdings gibt es nur eine leere Arbeitsmappe zurück. Was mache ich falsch?

Antwort

1

Ich habe nicht viel Erfahrung mit Excel-Zeug in Python, aber Sie können versuchen, openpyxl, ich fand es viel einfacher zu verstehen.

Lösung für Ihr Problem:

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) 

Edit (Schreiben alle Zeilen in einer Zelle):

Sie haben neue Variable zu erstellen, auf die Sie Ihre Linien, und am Ende hinzufügen, werden Sie Weisen Sie die Zeichenfolgenvariable der Zelle im Arbeitsblatt zu.

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

Funktioniert gut Genau wie meine Frage unten, was oder wo müsste ich etwas im Code ändern, wenn ich alle Zeilen in einer Zelle anstatt einer Zeile in einer Zelle schreiben wollte? – MarcelPhy

+0

Warum möchten Sie diese zuweisen? Linien in eine Zelle? –

+0

Works perfekt, Problem gelöst, danke! – MarcelPhy

1

Zu allererst Sie scheinen in der Zeilennummer 1

Zweite immer zu schreiben, beginnt die Nummerierung bei 0

Mit diesen beiden kleinen Änderungen, sollten dies tun, was Sie wollen:

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

Großer Schritt vorwärts, es druckt jetzt im Excel! Gibt es eine Möglichkeit, dass ich alle Zeilen in einer Zelle schreiben kann, im Gegensatz zu jeder Zeile in einer neuen Zelle? – MarcelPhy

+0

worksheet.write (0,0, Summe ([flist [flist.index ('Start') + 1: flist.index ('End')]) – WNG

+0

Es gibt immer "SyntaxError: ungültiges Zeichen in Bezeichner" für die Sekunde zurück Irgendwelche Tipps? – MarcelPhy

1

Die Daten werden in die Zelle geschrieben, aber ein Problem ist, dass worksheet.write() den Inhalt der Zelle überschreibt, so dass nur das letzte geschriebene Element vorhanden ist.

Sie können dieses Problem lösen, indem die Linien zwischen Start und End akkumulieren und sie dann mit einem worksheet.write() schreiben:

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

Hier Linien werden in einer Liste gesammelt. Wenn eine Endzeile gesehen wird, werden die Inhalte dieser Liste mit neuen Zeilen verbunden (Sie könnten diese durch ein anderes Zeichen ersetzen, z. B. Leerzeichen) und in die Zelle geschrieben werden.

+0

Ich sehe meinen Fehler jetzt, aber in Ihrer Lösung bekomme ich auch nur ein leeres Arbeitsblatt. Irgendwelche Ideen, was könnte schief gehen? – MarcelPhy

+0

Wie sehen Sie die Tabelle? Ich habe festgestellt, dass Zellen in LibreOffice wenn leer erscheinen Der Inhalt endet mit einer neuen Zeile Versuchen Sie, die Zelle A1 zu vergrößern. Funktioniert das Beispiel von http://xlsxwriter.readthedocs.io/getting_started.html (Ausführen eines Beispielprogramms) für Sie? – mhawke

+0

Vergrößern hat den Job! Perfekt – MarcelPhy

Verwandte Themen