我有一个列表,其中包含要打开的目录和文件名,从中读取一个段落并将该段落保存到列表中。
问题是我不知道如何从文件中“过滤”该段落并将其插入到我的列表中。
到目前为止我的代码。
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
运行代码时,可以按预期从文件中获取所有行。
答案 0 :(得分:1)
您需要学习导入文本的结构。段落如何分隔?看起来像'\ n \ n',可以在'\ n \ n'上拆分文本文件并返回所需段落的索引吗?
text = 'paragraph one text\n\nparagraph two text\n\nparagraph three text'.split('\n\n')[1]
print(text)
>>> 'paragraph two text'
另一个选项,就像其他人提到的那样,是正则表达式(又称RegEx),您可以使用
导入import re
RegEx用于查找文本中的图案。
转到https://pythex.org/并获取其中一个文档的样本,然后尝试查找与您要查找的段落相匹配的模式。
在此处了解有关RegEx的更多信息 https://regexone.com/references/python
答案 1 :(得分:0)
解决了我的字符串切片问题。
基本上,我只扫描每行以查找开始字符串和结束字符串,然后从中取出行。然后将这些行添加到列表中并写入文件中。
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()