Python 将文本文件段落加载到不带库的字符串中

Python 将文本文件段落加载到不带库的字符串中,python,string,file,txt,Python,String,File,Txt,很抱歉,对于你们中的一些人来说,这个问题可能看起来有点愚蠢,但我完全是Python编程的初学者,所以我很差,还有很多东西要学。 所以基本上我有一个由段落分隔的长文本文件,有时换行符可以是两倍或三倍,使任务对我们来说更加困难,所以我添加了一个小检查,看起来它工作正常,所以我有一个名为“段落”的变量,告诉我当前在哪个段落中。 现在基本上我需要扫描这个文本文件并搜索其中的一些单词序列,但是换行符是这里最糟糕的敌人,例如,如果我有string=“dummy text”,我正在研究这个: "ra

很抱歉,对于你们中的一些人来说,这个问题可能看起来有点愚蠢,但我完全是Python编程的初学者,所以我很差,还有很多东西要学。 所以基本上我有一个由段落分隔的长文本文件,有时换行符可以是两倍或三倍,使任务对我们来说更加困难,所以我添加了一个小检查,看起来它工作正常,所以我有一个名为“段落”的变量,告诉我当前在哪个段落中。 现在基本上我需要扫描这个文本文件并搜索其中的一些单词序列,但是换行符是这里最糟糕的敌人,例如,如果我有string=“dummy text”,我正在研究这个:

"random questions about files with a dummy
 text and strings

 hey look a new paragraph here"
正如您所看到的,在虚拟和文本之间有一个换行符,所以逐行读取文件是不可行的。所以我想直接将整个段落加载到一个字符串中,这样我甚至可以更容易地删除标点符号和内容,并直接检查其中是否包含这些单词序列。 所有这些都必须在没有库的情况下完成。
但是,我的段落计数器代码在读取文件时起作用,因此如果可以在字符串中上载整个段落,我基本上应该使用类似“.连接,直到段落增加1,因为我们在下一段?有什么想法吗?

你可以去掉换行符。下面是一个不同问题的例子

data = open('resources.txt', 'r')
book_list = []
for line in data:
    new_line = line.rstrip('\n')
    book_list.append(new_line)

这应该能奏效。它很短很优雅:

with open('dummy text.txt') as file:
    data = file.read().replace('\n', '')
print(data)#prints out the file
输出为:

"random questions about files with a dummy text and strings hey look a new paragraph here"

我认为你不需要用一种困难的方式来思考。这是一种非常常用的解决此类问题的模式

paragraphs = []
lines = []
for line in open('text.txt'):
    if not line.strip():  # empty line
        if lines:
            paragraphs.append("".join(lines))
            lines = []
    else:
        lines.append(line)
if lines:
    paragraphs.append("".join(lines))
如果
strip
ped行为空,则会遇到第二行
\n
,这意味着您必须
将前面的行连接到段落中

如果遇到第三个
\n
,则不能再次
加入
,因此请删除以前的行(
行=[]
)。这样,您就不会再加入同一段落了

要检查最后一行,请尝试此模式

f = open('text.txt')
line0 = f.readline()
while True:
    # do what you have to do with the previous line, `line0`
    line = f.readline()
    if not line:    # `line0` was the last line
        # do what you have to do with the last line
        break
    line0 = line  

您的变量
段落是什么?你的“random…here”是一个段落吗?@Gyuhyonchoi我没有在这里发布代码,但变量段落只是一个整数,每次在一个或多个新闻空间后发现更多单词时,它就会增加。例如,在本例中,从“random”到“strings”是第1段,那么从“hey”到“here”是第2段还是第1段换行分开的段落?你想做的是在一个段落中找到单词序列?@Gyuhyonchoi有时可能会出现换行符超过2个的情况,以便使整个事情更加复杂(这是一个大学项目)。基本上是的,我需要确定这些单词序列是否在该段落中(很明显,如果“dummy”和“text”不相邻,那么输出应该为false)我想当你遇到空行时,你可以加入
?是的.rstrip是我确定要做的事情我只需要弄清楚如何将一个段落的所有行合并到一个字符串中,在我完成所有需要完成的操作后,将另一个段落加载到字符串中,依此类推,直到文件完成finished@Krist假设您有一个名为my_string的字符串,它可能是空的,也可能不是空的。您只需在for循环中添加my_string+=new_行,它将生成您的字符串。这将替换\n并解决检查期间的\n问题,但我仍然需要跟踪段落计数器,它是返回值的一部分,知道吗?我不知道您的代码是如何工作的。如果可能的话,你能分享一下你为输出段落而编写的代码吗。也许那时我能找到一种方法把他们联系起来。谢谢,虽然做了一些修改,但保留了这个概念,我将其集成到了我的程序中,但只有一个问题:当我到达文件末尾(最后一段)时,因为没有换行符,它只会忽略.join。在这一点上,有没有办法理解我是否在文件的最后一行?我是这样打开它的:对于索引,在enumerate(file.readlines())中的行:在我的代码段中。如果
for
循环的
之外的
最后一个
是加入
最后一段。
readlines()
返回的列表的最后一个元素是最后一行。在最后一行之后,
readline()
返回
None
。是的,但是我必须做一些更改以将其集成到我的程序中,并且不能接受最后一部分,只是在这之前做了另一段代码来读取文件并保存最后一行,并添加了一个“if”在本段中,检查case line==last_line是否只需执行.join,在我完成整个过程后,我将开始优化process@Krist我为您的要求添加了另一个图案。请检查并接受它,如果它有效的话!:)工作得很好!由于这个练习的复杂性,我仍然被卡住了,但我希望找到一种解决方法,我低估了“按顺序排列的单词”部分,文件中的单词在我的输出中是唯一的。。。也许明天会要求更多的帮助,因为这让我抓狂,已经一个多星期了