Python 读取文件,创建仅包含代码段块的新文件

Python 读取文件,创建仅包含代码段块的新文件,python,Python,我有一个文本文件,看起来像: text texttext texttext texttext texttext text text texttext texttext texttext text ==========[start log]==== .. .. .. ============== testtextexttexttesttextexttext testtextexttexttesttextexttext ==========[start log]==== .. .. .. ==

我有一个文本文件,看起来像:

text texttext texttext texttext texttext text
text texttext texttext texttext text
==========[start log]====
..
..
..
==============


testtextexttexttesttextexttext
testtextexttexttesttextexttext

==========[start log]====
..
..
..
==============
因此,我想创建一个新文件,其中包含以下块:

==========[start log]=== 
..
..
..
=============
所有
==
块下面都有两个空行


块内的
实际上是文本。

使用
sed非常容易:

sed -n '/==============/,/==============/p' example.txt
收益率:

==============
..
..
..
==============
==============
..
..
..
==============

使用
sed非常简单

sed -n '/==============/,/==============/p' example.txt
收益率:

==============
..
..
..
==============
==============
..
..
..
==============

从我的阅读中,我认为您试图不将文本包含在“==”之外

raw = open(the_file).read()
parts = raw.split("=============")
new_parts = []
for ii, part in enumerate(parts):
    if not (ii % 2): continue
    new_parts.append(part)
new_raw = "=============".join(new_parts)
open(new_file, 'w').write(new_raw)

从我的阅读中,我认为您试图不将文本包含在“==”之外

raw = open(the_file).read()
parts = raw.split("=============")
new_parts = []
for ii, part in enumerate(parts):
    if not (ii % 2): continue
    new_parts.append(part)
new_raw = "=============".join(new_parts)
open(new_file, 'w').write(new_raw)

你可以一行一行地去,只复制你想要的

old = open('old.txt', 'r')
new = open('new.txt', 'w')

in_block = False

for line in old:
    if line.startswith('===='):
        in_block = not in_block # Oposite
        new.write(line)
    elif in_block:
        new.write(line)

old.close()
new.close()
它把这个放在“new.txt”中

==============
..
..
..
==============
==============
..
..
..
==============

你可以一行一行地去,只复制你想要的

old = open('old.txt', 'r')
new = open('new.txt', 'w')

in_block = False

for line in old:
    if line.startswith('===='):
        in_block = not in_block # Oposite
        new.write(line)
    elif in_block:
        new.write(line)

old.close()
new.close()
它把这个放在“new.txt”中

==============
..
..
..
==============
==============
..
..
..
==============

我更喜欢使用生成器处理块之前的材质和块内材质之间的“状态更改”

你真的在读一个头尾序列。标题是(文本“==”,更多文本“==”)。尾巴是头尾序列。该定义是尾部递归的,它允许我们将其展平为一个循环

def gen_block_sequence( some_source ):
    block_iter= tier(some_source):
    for line in block_iter:
        if line == '==============':
            block= list( gen_head(block_iter)
            yield block

def gen_head( block_iter ):
    for line in block_iter:
        if line == '==============':
            break
        yield line

虽然这很长,但我发现它可以很好地概括,以适应大量额外的处理和决策。

我更喜欢使用生成器来处理块前材质和块内材质之间的“状态变化”

你真的在读一个头尾序列。标题是(文本“==”,更多文本“==”)。尾巴是头尾序列。该定义是尾部递归的,它允许我们将其展平为一个循环

def gen_block_sequence( some_source ):
    block_iter= tier(some_source):
    for line in block_iter:
        if line == '==============':
            block= list( gen_head(block_iter)
            yield block

def gen_head( block_iter ):
    for line in block_iter:
        if line == '==============':
            break
        yield line


虽然这很长,但我发现它可以很好地概括,以适应大量额外的处理和决策。

看起来像是家庭作业:)如果是,请适当地标记。没有它的实际工作,日志文件解析。出于好奇,你甚至试过自己解决这个问题吗?到目前为止,我一直在阅读.py文件中的文件。
print“test”
在我的.py文件中不起作用,我如何输出到控制台以进行简单的日志记录?看起来像作业:)如果有,请适当地标记。不,它实际上起作用,日志文件解析。出于好奇,你甚至试过自己解决这个问题吗?到目前为止,我只能在.py文件中读取该文件。
打印“测试”
在我的.py文件中不起作用,如何输出到控制台以进行简单的日志记录?是否将匹配项写入文件?我必须循环吗?@codecompleting,是的。您只需对匹配项中的匹配项执行
:out_file.write(match)
。实际上,第一个分隔符看起来像
==========[start log]=====
我必须转义括号吗?“我必须转义括号吗?”当然可以。如有疑问,请阅读
re
模块上的信息。此模块是必需的。那么我是否要将匹配项写入文件?我必须循环吗?@codecompleting,是的。您只需对匹配项中的匹配项执行
:out_file.write(match)
。实际上,第一个分隔符看起来像
==========[start log]=====
我必须转义括号吗?“我必须转义括号吗?”当然可以。如有疑问,请阅读
re
模块上的信息。这个模块很重要。你可能应该使用
和open('old.txt','r')作为旧的:
和open('new.txt','w')作为新的:
来保证文件正确关闭。从技术角度看,我应该这样做。从一个试图阅读代码的人那里;缩进不是很合理。我在底部添加了
.close()
代码。“缩进不是很合理”。事实上,我发现清晰和明确的正确性远远超过了缩进。此外,还有一些解决方法:。您可能应该将
与open('old.txt','r')一起用作old:
并将
与open('new.txt','w')一起用作new:
以确保文件正确关闭。从技术角度看,我应该这样做。从一个试图阅读代码的人那里;缩进不是很合理。我在底部添加了
.close()
代码。“缩进不是很合理”。事实上,我发现清晰和明确的正确性远远超过了缩进。此外,还有一些变通方法:。