3

次の形式のテキスト ファイルに出力される空間データを操作します。

COMPANY NAME
P.O. BOX 999999
ZIP CODE , CITY 
+99 999 9999
23 April 2013 09:27:55

PROJECT: Link Ref
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Design DTM is 30MB 2.5X2.5
Stripping applied to design is 0.000

Point Number      Easting     Northing        R.L. Design R.L.  Difference  Tol  Name
     3224808   422092.700  6096059.380       2.520     -19.066     -21.586  --   
     3224809   422092.200  6096059.030       2.510     -19.065     -21.575  --   
<Remainder of lines>
 3273093   422698.920  6096372.550       1.240     -20.057     -21.297  --   

Average height difference is -21.390
RMS  is  21.596
0.00 % above tolerance
98.37 % below tolerance
End of Report

示されているように、ファイルにはヘッダーとフッターがあります。データはスペースで区切られていますが、列間の量が等しくありません。

私が必要としているのは、Easting、Norting、および Difference を含むカンマ区切りのファイルです。

数百の大きなファイルを手動で変更する必要がないようにしたいので、ファイルを処理するための小さなスクリプトを作成しています。これは私がこれまでに持っているものです:

#! /usr/bin/env python
import csv,glob,os
from itertools import islice
list_of_files = glob.glob('C:/test/*.txt')
for filename in list_of_files:
(short_filename, extension )= os.path.splitext(filename)
print short_filename
file_out_name = short_filename + '_ed' + extension
with open (filename, 'rb') as source:
    reader = csv.reader( source) 
    for row in islice(reader, 10, None):
        file_out= open (file_out_name, 'wb')
        writer= csv.writer(file_out)
        writer.writerows(reader)
        print 'Created file: '+ file_out_name
        file_out.close()
print 'All done!' 

質問:

  • 「ポイント番号」で始まる行を出力ファイルのヘッダーにするにはどうすればよいですか? リーダー/ライター ビットの代わりに DictReader を配置しようとしていますが、機能しません。

  • 区切り文字「,」を使用して出力ファイルを書き込むことは機能しますが、各スペースの代わりにコンマを書き込むため、出力ファイルに空の列が多すぎます。どうすればこれを回避できますか?

  • フッターを削除するにはどうすればよいですか?

4

3 に答える 3