コマンドライン引数を使用して、複数テキストファイルからテキストファイルを検索するサンプルです。
import sys
import os
if len(sys.argv) <= 1: # sys.argvがコマンドライン引数
print("pyファイルの後ろに引数(キーワード)を指定してください")
sys.exit(0) # プログラムを終了する
keyword = sys.argv[1]
for root, dirs, files in os.walk("."):
for fi in files:
result = []
try: #try-catchを使って、テキストファイル以外読み込んだ時のエラー防止
path = os.path.join(root, fi)
with open(path, encoding='utf-8') as f:
for no, line in enumerate(f):
if line.find(keyword) >= 0:
line = line.strip()
s = "| {0:4}: {1}".format(no+1, line)
result.append(s)
except:
continue
# resultに検索結果があれば結果を表示
if len(result) > 0:
print("+ file: " + fi)
for li in result:
print(li)
2、スクリプトパス
__file__でパス取得できます。
print __file__ # スクリプトファイルへの相対パス
print os.path.dirname(__file__) # スクリプトファイルのあるディレクトリへの相対パス
txt = os.path.join(os.path.dirname(__file__), 'input.txt') # スクリプトと同じディレクトリのファイル input.txt のパス
print txt
print os.path.basename(__file__) # スクリプトファイル名
print os.path.abspath(__file__) # スクリプトファイルの絶対パス
print os.getcwd() # 実行時カレントディレクトリの絶対パス
os.path にはいろいろな関数があります。
https://docs.python.jp/3/library/os.path.html
3、クラス
__init__が初期化関数になります。selfはインスタンス自身を表します。
class Clock:
def __init__(self, hour, min, sec):
self._hour = hour
self._min = min
self._sec = sec
@property
def hour(self):
return self._hour
obj = Clock(11, 10, 0)
print(obj.hour)
派生クラスは、次のように定義します。
class 派生クラス名(基底クラス名):
派生クラスの定義
...
派生クラスから基底クラスのメソッドを呼び出すには
super().基底クラスのメッソド()
と書きます。
メッソド名や変数名がアンダーバー(_)からはじまっていれば、
非公開メソッド定義になります。
class Car:
''' 基底クラス '''
def __init__(self, owner):
self.car_type = "normal"
self.owner = owner
def show_status(self):
''' 状態を表示 '''
print("owner:", self.owner)
print("car_type:", self.car_type)
def _test
''' 非公開メソッド'''
print("test.....")
class Van(Car):
''' 派生クラス '''
def __init__(self, owner):
super().__init__(owner)
self.car_type = "van"
0 件のコメント:
コメントを投稿