1

这是我正在使用的输入文本文件:https ://gist.github.com/TestAcc7777/5983147

在文本文件中,最初几行之后的每一行都包含“CORE X”,其中 X 是从 1 到 64 的数字。一些包含“CORE X”的行还包含“V3”或“V4”。

对于 X 的每个值,我想输出包含“CORE X”并且仅包含“V3”或“V4”之一的行 - 使用随机数生成器决定哪一个。

我在 Python 3 中编写了以下内容,并合并了一些正则表达式,以编写包含“CORE X”的所有行,但包含被拒绝的“V”片段的行除外:

import re
import random

tri = open(input("Input File: "))
tro = open(input("Output File: "),'w')

for line in tri.readline():
    for i in [1,65,1]:
        if random.random()>0.5:
            q = 4
        else:
            q = 3
        if re.search(r'CORE\s'+str(i), line):
            if re.search(r'V', line):
                if re.search(r'V'+str(q), line):
                    tro.write(line)
            else:
                tro.write(line)

但是,当我运行该程序时,它似乎完成得相当快,并且输出文件为空。我对 Python 和一般编程仍然相当缺乏经验,所以任何帮助我的程序得到帮助的帮助都将不胜感激。

4

3 回答 3

2

替换此行

for line in tri.readline():

作为:

for line in tri:

readline()返回一行。

for line in tri.readline()迭代第一行的每个字符(字符串)。

于 2013-07-12T09:44:48.510 回答
2

检查此示例代码

import re
import random

tri = open(raw_input("Input File: "))
tro = open(raw_input("Output File: "),'w')

cmp1 = re.compile(r'CORE\s[0-9]+\s+V3')
cmp2 = re.compile(r'CORE\s[0-9]+\s+V4')

m = None
for line in tri:
    if random.random()>0.5:
        m = cmp1.search(line)
    else:
        m = cmp2.search(line)

    if m:
        tro.write(line)
        m = None
于 2013-07-12T10:46:46.757 回答
2

@falsetru 也打败了我,你只是在第一行迭代:

import re
import random


# Using With means we don't have to remember to close the file
# First open the input file
with open(input("Input File: ")) as tri:
    # Open the out file for writing
    with open(input("Output File: "),'w') as tro:  
        # For line in the input file, don't need readlines
        for line in tri:
            for i in [1,2]:
                if random.random()>0.5:
                    q = 4
                else:
                    q = 3
                if re.search(r'CORE\s' + str(i), line):
                    if re.search(r'V', line):
                        if re.search(r'V' + str(q), line):
                            tro.write(line)
                    else:
                        tro.write(line)

我已经重新格式化了你的代码并添加了一些评论,所以我想我还是会发布它。

于 2013-07-12T10:08:09.937 回答