2

我是 python 的初学者,我正在尝试通过谷歌和一些书籍学习......我正在从事一个特定的项目并且到目前为止做得很好......

我的程序的第一部分接受一个输入文本文件,并扫描它以查找行内的某些数据,然后如果它不满足搜索条件,它将该行写回一个新文件......

我所做的丑得要命,但它也很慢......当我在树莓派上运行它时,这部分仅需要 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:()

我很尴尬在公共场合展示这一点,但我很想看到一种“pythonic”的方式来更优雅(更快!)

有人帮忙吗?

4

2 回答 2

2

要回答您的问题,这是一种 pythonic 方式:

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)
于 2012-08-08T00:00:39.530 回答
0

逐行读取文件的 Pythonic 方式将适用于您的情况:

with open('mirror2.txt', mode='r') as fo:
    for line in fo:
        # Rest

如果这显着加快了您的程序,则意味着 Python 解释器在管理 ARM 处理器上的内存方面做得不是很好。

其余的已经在评论中提到了。

于 2012-08-07T23:52:09.710 回答