2017-10-27 10 views
1

私はFlight Simulatorのための風景を構築しており、テキストファイル(3,579,189)の多くの行を編集する方法を理解する必要があります。残りの部分は変更せずに、空白を情報で埋める方法は?

私はツールとしてTextCrawler Pro、Node、Python SVN、Notepad ++を持っています。

生、編集前の部分:

POLYGON_POINT -79.750000000217,42.017498354525,0 
POLYGON_POINT -79.750000000217,42.016478251402,0 
POLYGON_POINT -79.750598748133,42.017193264943,0 
POLYGON_POINT -79.750000000217,42.017498354525,0 


POLYGON_POINT -79.750000000217,42.085882815878,0 
POLYGON_POINT -79.750000000217,42.082008734634,0 
POLYGON_POINT -79.751045507507,42.082126409633,0 
POLYGON_POINT -79.750281907508,42.083166574215,0 
POLYGON_POINT -79.750781149174,42.084212672130,0 
POLYGON_POINT -79.750000000217,42.085882815878,0 


POLYGON_POINT -79.750000000217,42.088955814831,0 
POLYGON_POINT -79.750456566883,42.087544672125,0 
POLYGON_POINT -79.751642899173,42.088273325249,0 
POLYGON_POINT -79.751461052298,42.088916154415,0 
POLYGON_POINT -79.750000000217,42.088955814831,0 

メモ帳++の置き換え機能では、POLYGON_POINTの行を追加するのは簡単です。今、私はそれはように見せることで、いくつかの支援が必要:

BEGIN_POLYGON 
POLYGON_POINT -79.750000000217,42.017498354525,0 
POLYGON_POINT -79.750000000217,42.016478251402,0 
POLYGON_POINT -79.750598748133,42.017193264943,0 
POLYGON_POINT -79.750000000217,42.017498354525,0 
END_POLY 
BEGIN_POLYGON 
POLYGON_POINT -79.750000000217,42.085882815878,0 
POLYGON_POINT -79.750000000217,42.082008734634,0 
POLYGON_POINT -79.751045507507,42.082126409633,0 
POLYGON_POINT -79.750281907508,42.083166574215,0 
POLYGON_POINT -79.750781149174,42.084212672130,0 
POLYGON_POINT -79.750000000217,42.085882815878,0 
END_POLY 
BEGIN_POLYGON 
POLYGON_POINT -79.750000000217,42.088955814831,0 
POLYGON_POINT -79.750456566883,42.087544672125,0 
POLYGON_POINT -79.751642899173,42.088273325249,0 
POLYGON_POINT -79.751461052298,42.088916154415,0 
POLYGON_POINT -79.750000000217,42.088955814831,0 

すなわち、各ブロック及び各後END_POLYBEGIN_POLYGONを追加します。

どうすればいいですか?

+0

あなたはこれを行う方法を尋ねていますかNotepad ++で?またはPython?あなたの提案した方法は何ですか?何を試しましたか? –

答えて

1

itertools.groupby(空白でないグループをif kの条件にしている)だけを使用して、行をグループ化し、各グループのヘッダー/フッターを追加します。その後itertools.chain

import itertools 

with open("file.txt") as f, open("fileout.txt","w") as fw: 
    fw.writelines(itertools.chain.from_iterable([["BEGIN_POLYGON\n"]+list(v)+["END_POLYGON\n"] for k,v in itertools.groupby(f,key = lambda l : bool(l.strip())) if k])) 

key = lambda l : bool(l.strip()))グループ化キーで使用してグループをフラット化:空行のためのが、線路終端用のテスト

この方法は完全にファイルを読み取る必要がないので、それは非常に大きなファイルに適しています。ファイルを行単位で処理するので、メモリを消費しません。

+0

「あなたが私の恋人だと知ったことがありますか? –

+0

@BrianBashあなたにとって有益だった答えを投票して受け入れることを忘れないでください! https://stackoverflow.com/help/someone-answers –

+0

@DamianLattenero thxのサポート! –

1

sed

cat -s file.txt |\ 
    sed -e 's/^$/END_POLY\nBEGIN_POLYGON/'\ 
    -e '1i BEGIN_POLYGON'\ 
    -e '$a END_POLY' 
  • cat -sを使用して迅速な解決がEND_POLYとBEGIN_POLYGONタグ
  • 秒と最後のsedの前に付加し、アペンドで空白行を置き換えるsedの最初の1
  • にすべての空白行を圧迫残りのタグは出力に
関連する問題