簡體   English   中英

如何用空白填充信息,而其余部分保持不變?

[英]How to fill the white-space with info while leaving the rest unchanged?

我正在為模擬飛行器構建場景,需要弄清楚如何在文本文件中編輯多行(其中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

使用Notepad ++的替換功能,添加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

即添加BEGIN_POLYGON每個塊和前END_POLY每個之后。

我怎樣才能做到這一點?

我將使用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()))是分組鍵:測試空行但行終止

此方法不需要完全讀取文件,因此適用於非常大的文件。 它逐行處理文件,因此不會占用內存。

使用sed的快速解決方案

cat -s file.txt |\
    sed -e 's/^$/END_POLY\nBEGIN_POLYGON/'\
    -e '1i BEGIN_POLYGON'\
    -e '$a END_POLY'
  • cat -s將所有空白行壓縮為一個
  • 第一個sed用END_POLY和BEGIN_POLYGON標簽替換空白行
  • 第二個和最后一個sed前置並將其余標簽附加到輸出中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM