1

私が使用している入力テキスト ファイルは次のとおりです: https://gist.github.com/TestAcc7777/5983147

テキスト ファイルでは、最初の数行の後の各行に「CORE X」が含まれています。ここで、X は 1 ~ 64 の数字です。「CORE X」を含む一部の行には、「V3」または「V4」も含まれています。

X の値ごとに、「CORE X」を含む行を出力し、「V3」または「V4」のいずれかのみを含む行を出力したいと考えています。

Python 3 で次のように記述し、いくつかの正規表現を組み込んで、拒否された 'V' フラグメントを含む行を除く 'CORE X' を含むすべての行を作成しました。

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 に答える