0

私はこのようなファイルを持っています..

xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
a b c invalid #seperated by tab
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx

a b c invalid基本的にa b reviewed rd # separated by tab 無効で終わる行はすべて置き換える必要があります。その行を置き換える必要がありますが、その行reviewed rd // separated by tabの最初と2番目の単語を保持する必要があります(3番目と4番目のみを置き換えます)。

私はこのようなことを始めましたが、これは私が望むことを正確には行いません。

f1 = open('fileInput', 'r')
f2 = open('fileInput'+".tmp", 'w')
for line in f1:
    f2.write(line.replace('invalid', ' reviewed'+\t+'rd'))
f1.close()
f2.close()

regexオプションになる可能性がありますが、私はまだそれが得意ではありません。誰か助けてくれませんか。

PS a、b、および c は変数です。'a'、'b'、'c' を正確に検索することはできません。

4

3 に答える 3

2
import re

pattern = re.compile(r'\t\S+\tinvalid$')
with open('data') as fin:
    with open('output', 'w') as fout:
        for line in fin:
            fout.write(pattern.sub('\treviewd\trd', line))
于 2012-07-30T19:32:53.027 に答える
2
f1 = open('fileInput', 'r')
f2 = open('fileInput+".tmp"', 'w')
for line in f1:
    if line[:-1].endswith("invalid"):
        f2.write("\t".join(line.split("\t")[:2] + ["reviewed", "rd"]) + "\n")
    else:
        f2.write(line)
f1.close()
f2.close()
于 2012-07-30T18:48:40.347 に答える
1
with open('input.tab') as fin, open('output.tab', 'wb') as fout:
    tabin = csv.reader(fin, delimiter='\t')
    tabout = csv.writer(fout, delimiter='\t')
    for row in tabin:
        if len(tabin) != 4:
            continue # or raise - whatever
        if row[-1] == 'invalid':
            tabout.writerow(row[:2] + ['reviewed', 'rd'])
于 2012-07-30T19:07:33.450 に答える