1

input.txt はタブ区切りです。

置き換える簡単なコードを知っています。

import fileinput
for line in fileinput.FileInput("input.txt",inplace=1):
    line = line.replace("AA","0")
    print line,

しかし、input.txt の 3 列目のみ (input.txt ファイル全体ではなく) のセルを置き換えたいのですが、セルが AA か AAA か BB か BBB のいずれかである場合、セルを 0 に置き換えたいと考えています。それらのいずれでもない場合は、セルを 1 ずつ増やします。

ここでは、「セルの内容全体を一致させる」について話しています。

「セルの内容全体を一致させる」とは、セル (input.txt の (2,3) 要素など) が正確に AA または AAA または BB または BBB である場合にのみ置換されることを意味します。「AAs」などのセルは、何にも置き換えられません。

逆に、「セルの内容全体を一致させる」が適用されない場合、セルに AA、AAA、BB、または BBB が単に「含まれる」場合はいつでも置換されます。したがって、セル「AAhaha」は「0haha」に置き換えられます

とにかく、繰り返しますが、input.txt の 3 列目のみ (input.txt ファイル全体ではなく) のセルを置き換えたいのですが、セルが AA か AAA か BB のいずれかである場合、セルを 0 に置き換えたいです。 BBB、「セル全体の内容に一致する」方法で、セルがそれらのいずれでもない場合はセルを1に置き換えます。

4

2 に答える 2

2
for line in fileinput.FileInput("input.txt",inplace=1):
    cells = line.split('\t')
    cells[2] = '0' if cells[2] in ('AA', 'AAA', 'BB', 'BBB') else '1'
    print '\t'.join(cells),

ただし、タブ区切りデータを単純化して表示していることに注意してください。ファイルが CSV/TSV 形式全体を使用し、引用符で囲まれたセルにタブ文字や改行が含まれている場合csvは、適切な CSV パーサーである が必要です。

逆に、たとえば"a"を含む列 0 のセルを として出力する場合は、 を使用しないで"a"ください。これは、読み取り時に引用符が削除され、そのセルには必要ないcsvため、書き込み時に再挿入されないためです。

したがって、最初にファイル形式がどのように定義されているかを確認する必要があります。次に、ファイルの読み取り方法と書き込み方法を選択できます。いずれにせよ、それを変更することはほぼ同じです。

もう 1 つ注意点があります。改行については何もしていないので、最後のセルに配置されます。したがって、3 番目のセル"0"最後のセルである場合、セルがまたはに置き換えられたときに削除され"1"ますが、これはおそらくあなたが望むものではありません。セルの数について話している間、このコードはもちろん、いずれかの行のセルが 3 つ未満の場合に例外をスローします。それをどのように処理するかを決定する必要があります。特に、テキスト ファイルの末尾に空白行が見つかることは珍しくありません。

于 2013-11-01T12:49:01.683 に答える
1

これにはcsvモジュールを使用する必要があります。

import csv
with open("input.txt", "rb") as infile, open("output.txt", "wb") as outfile:
    reader = csv.reader(infile, delimiter="\t")
    writer = csv.writer(outfile, delimiter="\t")
    for row in reader:
        row[2] = "0" if row[2] in ("AAA", "AA", "BBB", "BB") else "1"
        writer.writerow(row)
于 2013-11-01T12:49:14.373 に答える