web-dev-qa-db-ja.com

Pythonを使用してテキストファイル内で検索および置換

約400,000行のテキストファイルがあります。このテキストファイルを、スペースまたはタブで区切られたテキストファイルのみを受け入れるプログラムにインポートする必要がありますが、このテキストファイルはセミコロンで区切られています。 (Arcmap)からテキストファイルをエクスポートするプログラムには、脱線を変更するオプションはなく、テキストファイル自体で検索と置換を行うには、文字通り2日かかります。

これを行うスクリプトを検索しましたが、すべてセミコロンを個別に置き換えるのではなく、WordファイルのLINE全体をスペースで置き換えて、空のテキストファイルで置き換えます。

テキストファイルのサンプルを次に示します。

"OID_";"POINTID";"GRID_CODE";"POINT_X";"POINT_Y"
;1;-56.000000;200900.250122;514999.750122
;2;-56.000000;200900.750122;514999.750122
;3;-56.000000;200901.250122;514999.750122
;4;-57.000000;200901.750122;514999.750122
;5;-57.000000;200902.250122;514999.750122
;6;-57.000000;200902.750122;514999.750122
;7;-57.000000;200903.250122;514999.750122
;8;-57.000000;200903.750122;514999.750122
;9;-57.000000;200904.250122;514999.750122
;10;-57.000000;200904.750122;514999.750122

次のようなものが必要です。

1 -56.000000 200900.250122 514999.750122
2 -56.000000 200900.750122 514999.750122
18
Alice Duff

これはどう:

sed -i 's/;/ /g' yourBigFile.txt

これはPythonソリューションではありません。これをシェルで開始する必要があります。ただし、メモ帳を使用している場合は、Windowsを使用していると思います。そこで、ここでPythonソリューション:

f1 = open('yourBigFile.txt', 'r')
f2 = open('yourBigFile.txt.tmp', 'w')
for line in f1:
    f2.write(line.replace(';', ' '))
f1.close()
f2.close()
32
eumiro

pythonでは、 fileinput を使用できます。

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    line = line.replace(";"," ")
    print line,

これにより、すべての「;」が置き換えられます。所定のスペースに。

20
ghostdog74

Python 3.2では、これをコンテキストマネージャーとして使用する機能が追加されたため、何らかの理由で処理中に失敗したファイルは常に閉じられます。

import fileinput
def main():
    with fileinput.input(inplace=True) as f:
        for line in f:
            line = line.replace(";", " ")
            print(line, end='')

インスピレーション

処理するテキストファイルを指定して使用します。

4
tshepang