#python
#python
Вопрос:
У меня есть список, содержащий каталоги и имена файлов, которые я хочу открыть, прочитать абзац из и сохранить этот абзац в списке.
Проблема в том, что я не знаю, как «отфильтровать» абзац из файлов и вставить в мой список.
Пока мой код.
rr = []
file_list = [f for f in iglob('**/README.md', recursive=True) if os.path.isfile(f)]
for f in file_list:
with open(f,'rt') as fl:
lines = fl.read()
rr.append(lines)
print(rr)
Формат файла, из которого я пытаюсь прочитать. Текст между началом абзаца и новым абзацем — это то, что я ищу
There is text above this paragraph
## Required reading
* line
* line
* line
/n
### Supplementary reading
There is text bellow this paragraph
Когда я запускаю код, я получаю все строки из файлов, как и ожидалось.
Комментарии:
1. Я рекомендую научиться работать с
re
модулем — docs.python.org/3/library/re.html . Это действительно очень мощный инструмент. Но что именно вы имеете в виду? Приведите примеры исходных и целевых данных, которые вы хотите извлечь.2. Два вопроса (1) Какой абзац вы хотите? Всегда первый абзац? Всегда N-й абзац? Абзац, содержащий определенный текст? (2) Как файлы разделяют абзацы? Пустые строки между ними? Четыре или восемь пробелов в начале первой строки?
3. добавлен формат файла, из которого я читаю
Ответ №1:
Вам нужно узнать, как структурирован ваш импортированный текст. Как разделены абзацы? похоже ли это на ‘n n’, не могли бы вы разделить свой текстовый файл на ‘n n’ и вернуть индекс нужного вам абзаца?
text = 'paragraph one textnnparagraph two textnnparagraph three text'.split('nn')[1]
print(text)
>>> 'paragraph two text'
Другой вариант, как упоминал кто-то еще, — это регулярное выражение, известное как RegEx, которое вы можете импортировать с помощью
import re
Регулярное выражение используется для поиска шаблонов в тексте.
Перейдите к https://pythex.org / и возьмите образец одного из документов и поэкспериментируйте с поиском шаблона, который будет соответствовать абзацу, который вы хотите найти.
Узнайте больше о регулярном выражении здесь https://regexone.com/references/python
Ответ №2:
Решена моя проблема с разделением строк.
По сути, я просто просматриваю каждую строку на наличие начальной и конечной строк и создаю из них строки. Затем эти строки добавляются к списку и записываются в файл.
for f in file_list:
with open(f, 'rt') as fl:
lines = fl.read()
lines = lines[lines.find('## Required reading'):lines.find('## Supplementary reading')]
lines = lines[lines.find('## Required reading'):lines.find('### Supplementary reading')]
lines = lines[lines.find('## Required reading'):lines.find('## Required reading paragraph')]
rr.append(lines)
Но у меня все еще есть «## Требуется чтение» в моем списке и в моем файле, поэтому я запускаю второй метод чтения / записи.
def removeHashTag():
global line
f = open("required_reading.md", "r")
lines = f.readlines()
f.close()
f = open("required_reading.md", "w")
for line in lines:
if line != "## Required reading" "n":
f.write(line)
f.close()
removeHashTag()