在python中过滤掉测试文件中的一些奇怪的行

时间:2017-05-31 09:01:12

标签: python

我有一个非常大的文本文件,我希望能够获得一些代码。第一行是标识符,后跟许多行(不同行中的数字),如下例所示:

示例:

fixedStep ch=GL000219.1 start=52818 step=1
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
fixedStep ch=GL000219.1 start=52959 step=1
1.000000
1.000000
1.000000
fixedStep ch=M start=52959 step=1
1.000000
1.000000

这一行是标识符:fixedStep ch=GL000219.1 start=52818 step=1 我想过滤掉包含“ch=GL000219.1”和以下行(数字)的所有标识符行,并在其下面保留其他标识符和相应的行(数字)。喜欢这个输出:

fixedStep ch=M start=52959 step=1
1.000000
1.000000

你知道如何在python中做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您可以通过列表检查文件到listloop,检查是否符合conditions来写入文件。例如:

with open('test.txt', 'r') as f:
    with open('test2.txt', 'w') as w:
        data = f.read().splitlines()
        for i in xrange(len(data)):
            if data[i].startswith('fixedStep') and 'ch=GL000219.1' not in data[i]:
                w.write(data[i] + '\n')
                for t in xrange(i+1, len(data)):
                    if data[t].startswith('fixedStep') is False:
                        w.write(data[t] + '\n')
                    else:
                        break

输出:

fixedStep ch=M start=52959 step=1
1.000000
1.000000

答案 1 :(得分:0)

如果它是一个大文件,处理它可能会更有效率而不将其全部读入内存:

changeEmailAddress(user, newEmail) {
       new Promise((resolve, reject) => {
            user.setEmail(newEmail);
            userRepository.saveUser(user).then(() => {
                return resolve();
            }).catch(e => {
                return reject(e);
            });
        }
    );
}