目次

CSVファイル操作(Python)

 知人からバーサライタ用テキストファイルを貰いました。
 テキストファイルは、形式がCSVでした。



 CSV形式なので、実際のパターンとして使うには
 問題があると考えました。

 1でLED点灯、0でLED消灯なのに、0は「,」で区切って
 スペースもなし。スパースベクトル形式での保存のよう。

 テキストエディタで0を入れるのは面倒なので、スクリプト
 言語で、変換のコードを作成。

 1行ごとに入力し、1行の内容を表示することから開始。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  print( e )

 使ってみると、以下のようになります。



 1行目では凡例があるので、これを出さないように
 'A'が含まれているかで表示するしないとしておくと
 よいでしょう。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  if e.find('A') <= -1 :
    print( e )

 実行してみると、以下。



 16ビットにしたいので、最初の「,」は不要。
 スライスを利用して、削除すればよいかと。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  if e.find('A') <= -1 :
    ee = e[1:]
    print( ee )

 結果は、次のようになりました。



 データ数は、16に対して15なので
 1行目の最後に0を追加。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  if e.find('A') <= -1 :
    ee = e[1:] + '0'
    print( ee )

 結果は、以下。



 「,」の間に、0を入れる必要があるので
 文字列置換で対応させます。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  if e.find('A') <= -1 :
    ee = e[1:] + '0'
    tmp = ee.replace(',,',',0,')
    print( tmp )

 実行すると、次のようになります。



 まだ、「,,」があるので、0を入れます。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

for e in mytext :
  if e.find('A') <= -1 :
    ee = e[1:] + '0'
    tmp = ee.replace(',,',',0,')
    tmpx = tmp.replace(',,',',0,')
    print( tmpx )

 実行結果は、以下で16個の1か0の
 ビットが得られています。



 I/Oリダイレクトで、テキストファイルに
 変換できますが、コマンドラインでファイル
 名を指定して楽をすることを考えます。

#!/usr/bin/python3

import sys

args = sys.argv

with open( args[1] , encoding='utf-8' ) as f :
  mytext = f.read().splitlines()

tmpy = []
for e in mytext :
  if e.find('A') <= -1 :
    ee = e[1:] + '0'
    tmp = ee.replace(',,',',0,')
    tmpx = tmp.replace(',,',',0,')
    tmpy.append( tmpx )

f = open( args[2] , "w" )
for e in tmpy :
  ee = e + '\n'
  f.write( ee )
f.close()

 このスクリプトは、次のように利用。



 テキストファイルの内容は、画面表示で
 得られるた内容と同じ。




目次

inserted by FC2 system