Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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:从文本文件中提取节并将它们写入新的单独文本文件中_Python_Loops_Text_Filter_Line - Fatal编程技术网

Python:从文本文件中提取节并将它们写入新的单独文本文件中

Python:从文本文件中提取节并将它们写入新的单独文本文件中,python,loops,text,filter,line,Python,Loops,Text,Filter,Line,对不起,这里的问题很愚蠢 在python中,我有一个输入文本文件,如图所示,其中包括3个文本部分,我需要首先在每个文本部分的底部找到包含“shsux/en”的所有行,然后在这个部分下,我想循环并搜索以“udp”和“jkp”开头的所有行,并将整个部分输出到新的文本文件中 但我是Python的初学者,我不确定实现这一点的最佳方法是什么。感谢您的友好回复 像这样的 file1 = open('file1.txt', 'w') with open('source.txt', 'r') as sourc

对不起,这里的问题很愚蠢

在python中,我有一个输入文本文件,如图所示,其中包括3个文本部分,我需要首先在每个文本部分的底部找到包含“shsux/en”的所有行,然后在这个部分下,我想循环并搜索以“udp”和“jkp”开头的所有行,并将整个部分输出到新的文本文件中

但我是Python的初学者,我不确定实现这一点的最佳方法是什么。感谢您的友好回复

像这样的

file1 = open('file1.txt', 'w')

with open('source.txt', 'r') as source_file:
    for line in source_file:
        if 'shsux' in line:
            file1.write(line)
        # Same for other files...

file1.close()

我会这样做:

out_big = f.open(first_output_file, "w")
out_small_1 = f.open(second_output_file, "w")
out_small_2 = f.open(third_output_file, "w")
with open(source_file, "r") as f:
    for line in f:
        if "shsux" in line:
            out_big.write(line)
            if line.startswith("udp"):
                out_small_1.write(line)
            elif line.startswith("jkp"):
                out_small_2.write(line)
out_big.close()
out_small_1.close()
out_small_2.close()
但是我认为没有必要使用带有“shsux”的大文件,所以您可以跳过它


抱歉,犯了一个错误,使用了endswith(),而不是startswith。

如果我正确理解您的意图,我只需在行上创建一个循环,并将每行附加到相关列表(如果有),然后将这些列表写入末尾的文件。我不知道为什么你会考虑嵌套循环,所以也许我不完全理解期望的结果-如果是这样的话,你能详细说明吗?我想我想要的是首先找到“shsux”(作为一个分类器),然后可能使用嵌套循环找到“jkp”行和“udp”行,因为原始文件实际上相当大(它可能包含以“jkp”或“udp”开头的其他行,但结尾有其他我不需要的词),我只想过滤掉“jkp”和“udp”两个“shsux”行之间的行。更新了任务的描述。当返回所有三个列表时,它会起作用,但是如果我首先找到“shsux”行,并且可以在两个“shsux”行之间的每一行上方找到带有“udp”和“jkp”的行,该怎么办?谢谢你…我不确定这是否有效。