Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在txt文件中的特定位置放置换行符?_Python_Python 3.x_Line_Cut_Txt - Fatal编程技术网

Python 如何在txt文件中的特定位置放置换行符?

Python 如何在txt文件中的特定位置放置换行符?,python,python-3.x,line,cut,txt,Python,Python 3.x,Line,Cut,Txt,我有一个.txt文件,其中包含我研究所需的大量文本信息。因此,我正在尝试编写一个程序来进行关键字搜索(在我的例子中,我需要短语“Seld salt”),然后它将以该短语开头的文本逐行写入一个新文件,并在某个点截断(我还没有决定)。它实际上是一本包含17世纪数字化文件的书,用古俄语写成,但从图表上看,文本如下所示: “床单_№一, 文本文本文本文本 文本 text text卖盐text卖盐text 文本文本文本文本 床单_№1_反向 text text出售的盐text text text text

我有一个.txt文件,其中包含我研究所需的大量文本信息。因此,我正在尝试编写一个程序来进行关键字搜索(在我的例子中,我需要短语“Seld salt”),然后它将以该短语开头的文本逐行写入一个新文件,并在某个点截断(我还没有决定)。它实际上是一本包含17世纪数字化文件的书,用古俄语写成,但从图表上看,文本如下所示:

“床单_№一,

文本文本文本文本

文本

text text卖盐text卖盐text

文本文本文本文本

床单_№1_反向

text text出售的盐text text text text”

因此,这是一个非常糟糕的结构,我想要的是将所有的盐销售记录及其在全文中的位置放在一个文件中,以便我进行研究

现在,很抱歉做了这么长时间的介绍,我只是想展示一下我要处理的事情

我试图用docx lib编写一个代码,但结果证明,唯一可行的方法是在docx文件中的所需信息下划线,然后用代码将其提取出来,这不是很糟糕,但仍然需要时间

所以我停止了txt格式,现在我有了这个:

key_1 = 'sold'
key_2 = 'salt'

f_old = open("text.txt", encoding='utf-8')
f_result = open("text_result.txt", 'w', encoding='utf-8')

for line in f_old:
    line = line.split()
    if len(line) == 1:
        for elem in range(len(line)):
            f_result.write(line[elem] + '\n')
    else:
        if key_1 in line and key_2 in line:
            for word in range(len(line)):
                if line[word] == key_1 and line[word + 1] == key_2:
                    for elem in line[word: word + 10]:
                        f_result.write(elem + ' ')
                    f_result.write('\n')

f_old.close()
f_result.close()
根据上面的例子,它给出了以下结果:

“床单_№一,

卖盐text卖盐text

出售的盐文本

床单_№1_反向

出售的盐文本”

这不是一个大问题,以削减“出售盐”和其他额外的信息,如在第二行的结尾,我的手,因为我无论如何会做的行,将包含更多的信息比我需要的。但是,如果我的关键字出现在行中两次或更多次,有什么想法如何切线

我有一个想法,打开文本不仅是为了写作,也是为了阅读,然后用以下方式切掉行:

for line in f_result:
    line = line.split()
    if len(line) > 1:
        for word in line[::-1]:
            while line[word] != key_1:
                line.pop([word])
但如果我像这样把它放在代码中,它就不起作用了:

key_1 = 'sold'
key_2 = 'salt'
f_old = open("text.txt", encoding='utf-8')
f_result = open("text_result.txt", 'w+', encoding='utf-8')

for line in f_old:
    line = line.split()
    if len(line) == 1:
        for elem in range(len(line)):
            f_result.write(line[elem] + '\n')
    else:
        if key_1 in line and key_2 in line:
            for word in range(len(line)):
                if line[word] == key_1 and line[word + 1] == key_2:
                    for elem in line[word: word + 7]:
                        f_result.write(elem + ' ')
                    f_result.write('\n')

for line in f_result:
    line = line.split()
    if len(line) > 1:
        for word in line[::-1]:
            while line[word] != key_1:
                line.pop([word])

f_old.close()
f_result.close()
我是不是错过了一些基本的东西


提前感谢

因此,根据您提供的信息,我建议您在看到另一个
出售的盐时停止写作,然后从那里继续写作。这意味着,在编写时,您只需再次检查(就像您已经做的检查一样),确保新文件中的单词不是
已售出的盐
,如果是,则从那里跳出。它看起来是这样的:

key_1 = 'sold'
key_2 = 'salt'
f_old = open("text.txt", encoding='utf-8')
f_result = open("text_result.txt", 'w+', encoding='utf-8')

for line in f_old:
    line = line.split()
    if len(line) == 1:
        for elem in range(len(line)):
            f_result.write(line[elem] + '\n')
    else:
        if key_1 in line and key_2 in line:
            for word in range(len(line)):
                if line[word] == key_1 and line[word + 1] == key_2:
                    for elem in line[word: word + 7]:
                        f_result.write(elem + ' ')
                    f_result.write('\n')

for line in f_result:
    line = line.split()
    if len(line) > 1:
        for word in line[::-1]:
            while line[word] != key_1:
                line.pop([word])

f_old.close()
f_result.close()
对于f_old中的行:
line_words=line.split()#在
#循环,所以我建议只创建一个新变量
如果len(line_words)==1:
#这里不需要for循环,因为我们已经知道只有一个元素
f_result.write(第_行字[0]+'\n')
其他:
对于范围内的单词(len(line_words)-1):#因为您将访问单词+1元素,
#您需要注意超出范围的索引
如果行文字[word]==关键字1和行文字[word+1]==关键字2:
对于范围内的i(len(第i行单词[word:word+10]):
如果我0和行字[word+i]==关键字1和行字[word+i+1]==关键字2:
打破
f_结果。写入(第_行字[word+i]+'')
f_result.write('\n')
f_result.close()

我还建议您先使用索引,然后再使用索引来访问所需元素后面的元素,我认为它提供了更清晰的代码。

您希望实际结果如何?@Marko,是的,您已经知道我的想法了。感谢您的关注和有用的回答!我也很高兴您建议我尝试“枚举”,因为我是Python和编程的初学者