Python-根据内容从输入文件中删除某些行

Python-根据内容从输入文件中删除某些行,python,text,Python,Text,我是python的初学者,我正试图通过谷歌和一些书来学习。。。我正在做一个特定的项目,目前为止做得还不错 我的程序的第一部分获取一个输入文本文件,扫描其中的某些数据,然后如果它不满足搜索条件,它会将该行写回一个新文件 我所做的是丑陋的地狱,但它也非常缓慢。。。当我在Raspberry Pi上运行它时,这部分仅需4秒钟(输入文件的文本行数刚刚超过1700行) 以下是我的努力: with open('mirror2.txt', mode='r') as fo: lines =

我是python的初学者,我正试图通过谷歌和一些书来学习。。。我正在做一个特定的项目,目前为止做得还不错

我的程序的第一部分获取一个输入文本文件,扫描其中的某些数据,然后如果它不满足搜索条件,它会将该行写回一个新文件

我所做的是丑陋的地狱,但它也非常缓慢。。。当我在Raspberry Pi上运行它时,这部分仅需4秒钟(输入文件的文本行数刚刚超过1700行)

以下是我的努力:

    with open('mirror2.txt', mode='r') as fo:
        lines = fo.readlines()
        with open('temp/data.txt', mode='w') as of:
            for line in lines:
                date = 0
                page = 0
                dash = 0
                empty = 0
                if "Date" in line: date += 1
                if "Page" in line: page += 1
                if "----" in line: dash += 1
                if line == "\n":   empty += 1
                sum = date + page + dash + empty
                if sum == 0:
                    of.write(line)
                else:()
我很难为情地在公共场合展示这一点,但我希望看到一种更优雅(更快)的“蟒蛇式”方式


有人需要帮助吗?

根据您的情况,逐行读取文件的python方法是:

with open('mirror2.txt', mode='r') as fo:
    for line in fo:
        # Rest
如果这明显加快了程序的速度,则意味着Python解释器在ARM处理器上的内存管理方面做得不是很好


其余部分已经在评论中提到。

为了回答您的问题,这里有一种类似蟒蛇的方法:

import re

expr = re.compile(r'(?:Date|Page|----|^$)')
with open('mirror2.txt', mode='r') as infile:
    with open('data.txt', mode='w') as outfile:
        for line in infile:
            if not expr.search(line.strip()):
                outfile.write(line)

不想使用
sum
,Python已经内置了。改为合计怎么样?日期、页码和----是否可能在同一行?如果不是,您可以使用
elif
,这样在其中一个为真后,不会测试所有
If
s。还有,
else:()
部分是怎么回事?不,它们会在不同的行上,基本上我需要扫描那些字符串,然后扔掉带有字符串的行。。。同时删除空格。这个问题更适合@Levon。。。我认为“if”语句需要相应的“else”语句,所以说“else不做任何事情”。。。没有必要吗?谢谢你,我不知道我可以像那样直接处理这个文件。。。这使速度有了一些提高,但对我来说仍然很慢。从4s左右到3s左右,所以25%还不错!也许Raspberry Pi硬件是瓶颈,我正在64位win7笔记本电脑上编写代码,因此它可以立即在那里运行…谢谢,这看起来更漂亮!我会用它,读一下正则表达式,这样我就能真正理解它的功能了!我测试了它,它并没有产生任何速度的提高,但它看起来比我的丑陋的乱七八糟上面更有效!