Ich muss regelmäßig Text aus Dateien extrahieren, die so aussehen:
Idealerweise auf zwei Arten:
Nur die einzelnen Textzeilen
Beispiel:
fertig, wir haben tatsächlich eine Veröffentlichung herausgebrachtdieser Daten und wir arbeiten daran,
weitere Daten, die kürzlich vorgestellt wurden bei
In Absatzform (Text aus verschiedenen Zeilen zu einem einzigen Textblock zusammenfügen, den ich in Word, Google Docs usw. bearbeiten kann)
Beispiel:
fertig, wir haben tatsächlich eine Veröffentlichung aus diesen Daten und wir arbeiten an weiteren Daten, die kürzlich vorgestellt wurden bei
Wenn ich die Dateien erhalte, steht alles in Spalte A. Es gibt zwei Zeilen mit Zahlen, die ich nicht brauche, gefolgt von einer Zeile mit Text, den ich brauche, und dann einer leeren Zeile, nach der sich das Muster für Tausende von Zeilen wiederholt.
Es ist klar, dass dies manuell sehr zeitaufwändig ist, daher wäre ich für jede Hilfe sehr dankbar.
Antwort1
Es scheint, dass Sie die Daten aus jeder dritten Zeile der Spalte A extrahieren müssen, also A3, A7, A10 …
Schreiben Sie zunächst 3, 7 in die ersten beiden Zellen der Spalte B und ziehen Sie nach unten, um eine Reihe wie 3, 7, 10, 13 … zu erstellen.
Schreiben Sie nun die Formel =INDIREKT("A"&B1) in Zelle C1, um den Text der Zelle A3 anzuzeigen. Kopieren Sie die Formel nach unten, um den Text von Zelle A7, Zelle A10 usw. anzuzeigen.
Um den gesamten Text zu kombinieren, können Sie die Funktionen CONCAT oder TEXTJOIN verwenden, wenn Sie Excel 2016 haben. Der Vorteil von TEXTJOIN besteht darin, dass Sie Trennzeichen wie Leerzeichen oder Kommas zwischen den Texten verwenden können. Sie können auch leere Zellen ignorieren. Im folgenden Beispiel wurde ein Leerzeichen als Trennzeichen verwendet und True wurde verwendet, um leere Zellen zu ignorieren.
=TEXTJOIN(" ",TRUE,C1:C11)
Bei früheren Versionen können Sie die Funktion CONCATENATE verwenden, müssen jedoch alle Zellreferenzen einzeln schreiben.
=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).
Antwort2
Ich glaube nicht, dass es dafür eine einfache Möglichkeit gibt, ohne Code schreiben zu müssen. Sie können es wahrscheinlich mit VBA in Excel machen, aber ich habe damit nicht viel Erfahrung.
Hier ist ein Beispiel, wie Sie dies in Python tun können. Dieses Skript durchsucht die Zellen in einer bestimmten Spalte und druckt den Wert in eine Datei, wenn er nicht mit einer Zahl beginnt.
Excel-Tabelle:
Beispielbild für eine Excel-Tabelle
Ausgabe:
Here's the first string and the second now a third
Code:
from openpyxl import load_workbook # package for working with xls files
import re # regex package
workbookName = 'test.xlsx'
sheetName = 'Sheet1'
column = 'A'
maxRow = 50
outputFile = 'excelOutput.txt'
# Open the workbook
wb = load_workbook(workbookName)
# Create a file to put the data into
fh = open(outputFile, 'w')
# Loop through all the rows
for kk in range(1,maxRow):
# Grab the cell's value
cellValue = wb[sheetName][column+str(kk)].value
# If the cell isn't empty
if cellValue != None:
# If the cell doesn't start with a number
if not re.search("\\d",str(cellValue)[0]):
# Write the value from the cell into the text file
fh.write(cellValue)
# Close the file
fh.close()
Antwort3
Um das Löschen unerwünschter Zeilen im Bereich zu vereinfachen, ist es am besten, diese zuerst zu sortieren, sodass beispielsweise alle leeren Zeilen gruppiert werden. Es ist ziemlich einfach, die integrierte Sortierung von Zellen zu verwenden, aber um die ursprüngliche Reihenfolge der Texte beizubehalten, sind einige zusätzliche Schritte erforderlich.
Ich werde Ihre Daten als Beispiel als im Bereich liegend bezeichnen A1:A200
. Passen Sie sie bei Bedarf an Ihre tatsächlichen Daten an.
Geben Sie die Ziffer
1
in ZelleB1
und die Ziffer2
in Zelle einB2
. Wählen Sie die Zellen ausB1:B200
und wenden Sie die Funktion anfill
,linear
um am Ende die Zahlen 1 bis 200 in Spalte zu erhaltenB
. Dies hilft später dabei, die Texte in ihrer ursprünglichen Reihenfolge zurückzugeben.Wählen Sie den Bereich aus
A1:B200
und wenden Sie die Sortierung an. Sie haben nun die numerischen Zeilen sowie die Zeitrahmenzeilen, Textzeilen und die leeren Zeilen gruppiert. So können Sie die Zeilen, die Sie nicht behalten möchten, einfach auswählen und entfernen. Nach dem Löschen unerwünschter Zeilen sollten Sie einen Bereich haben, beispielsweiseA1:B50
mit den Texten und ihren ursprünglichen Zeilennummern in der SpalteB
.Um die richtige Reihenfolge der Texte wiederherzustellen, wählen Sie den Bereich aus
A1:B50
und sortieren Sie ihn nach der SpalteB
.
Um die Texte Word
zur Weiterverarbeitung nach zu kopieren, markieren, kopieren und einfügen in Word
. Entfernen Sie die Tabellenformatierung und verknüpfen Sie die Zeilen mit Suchen und Ersetzen (Suchen paragraph
und Ersetzen mit space
).