Мне регулярно приходится извлекать текст из файлов, которые выглядят следующим образом:
В идеале двумя способами:
Только отдельные строки текста
Пример:
сделано, у нас действительно есть публикацияэтих данных, и мы работаем над этим
больше данных, которые были недавно представлены на
В виде абзаца (объединение текста из разных строк в единый текстовый блок, который я могу редактировать в Word, Google Docs и т. д.)
Пример:
у нас уже есть публикация этих данных, и мы работаем над другими данными, которые были недавно представлены на
Когда я получаю файлы, все находится в столбце A. Есть две строки чисел, которые мне не нужны, за ними следует строка текста, который мне нужен, а затем пустая строка, после чего эта закономерность повторяется для тысяч строк.
Очевидно, что выполнение этой задачи вручную займет много времени, поэтому любая помощь будет принята с благодарностью.
решение1
Похоже, вам нужно извлечь данные из каждой третьей строки столбца A, т.е. A3, A7, A10....
Во-первых, напишите 3, 7 в первых двух ячейках столбца B и перетащите вниз, чтобы получить ряд, например, 3, 7, 10, 13 .....
Теперь напишите формулу =INDIRECT("A"&B1) в C1, которая покажет текст ячейки A3. Скопируйте формулу вниз, чтобы показать текст ячеек A7, A10 и так далее.
Чтобы объединить весь текст, вы можете использовать функции CONCAT или TEXTJOIN, если у вас Excel 2016. Преимущество TEXTJOIN в том, что вы можете использовать разделители, такие как пробел или запятая между текстами. Вы также можете игнорировать пустые ячейки. В следующем примере пробел был использован в качестве разделителя, а True было использовано для игнорирования пустых ячеек.
=TEXTJOIN(" ",TRUE,C1:C11)
В более ранних версиях можно использовать функцию СЦЕПИТЬ, но для этого придется писать все ссылки на ячейки одну за другой.
=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).
решение2
Я не думаю, что есть простой способ сделать это, не требующий написания кода. Вы, вероятно, можете сделать это с помощью VBA в Excel, но у меня нет большого опыта в этом.
Вот пример того, как это можно сделать на Python. Этот скрипт будет проходить по ячейкам в указанном столбце и выводить значение в файл, если оно не начинается с цифры.
Лист Excel:
Пример изображения листа Excel
Выход:
Here's the first string and the second now a third
Код:
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()
решение3
Для упрощения удаления нежелательных строк в диапазоне лучше всего сначала отсортировать их, например, чтобы все пустые строки были сгруппированы вместе. Использовать встроенную сортировку ячеек довольно просто, но для сохранения первоначального порядка текстов требуется несколько дополнительных шагов.
Я буду ссылаться на ваши данные как на находящиеся в диапазоне A1:A200
в качестве примера. При необходимости отрегулируйте их в соответствии с вашими фактическими данными.
Вставьте цифру
1
в ячейкуB1
и цифру2
в ячейкуB2
. Выберите ячейкиB1:B200
и примените функциюfill
,linear
чтобы получить в столбце от 1 до 200B
. Позже это поможет вернуть тексты в их первоначальном порядке.Выберите диапазон
A1:B200
и примените сортировку. Теперь у вас будут сгруппированные числовые строки, а также строки временных рамок, текстовые строки и пустые строки. Таким образом, легко выбрать и удалить строки, которые вы не хотите сохранять. После удаления нежелательных строк у вас должен быть диапазон, скажем,A1:B50
с текстами и их исходными номерами строк в столбцеB
.Чтобы восстановить правильный порядок текстов, выберите диапазон
A1:B50
и отсортируйте его по столбцуB
.
Чтобы скопировать тексты в Word
для дальнейшей обработки, выделите, скопируйте и вставьте в Word
. Удалите форматирование таблицы и объедините строки с помощью поиска и замены (поиск paragraph
и замена с помощью space
).