Python データ構造4種類の一覧 リスト(list),タプル(tuple),集合(set),辞書(dictonary)
名称 | リスト | タプル | 集合 | 辞書 |
list | tuple | set | dictonary | |
宣言 | data = ['aaa','bbb'] | data = ('aaa','bbb') | data = {'aaa','bbb'} set() set({'aaa','bbb'}) |
data = {'aaa':100,'bbb':200} dict([('aaa','100'),('bbb','200')]) |
取得 | data[0] >>> ['aaa'] data[0:2] >>> ['aaa','bbb'] |
data[0] >>> ('aaa') data[0:2] >>> ('aaa','bbb') |
data[0] >>> {'aaa'} data[0:2] >>> {'aaa','bbb'} |
data >>> {'aaa':100,'bbb':200} data['aaa'] >>>'100' data.get('aaa') >>>'100' |
追加 | data.append(値) data += [値] data.extend([値]) data[0:] = [値] data.insert(インデックス,値) |
イミュータブル ※追加不可 | data.add(値) data |= {値} |
data['ccc'] = 300 |
削除 | data.remove(値) del data[1:2] data[1:2] = data.clear() data = |
data.remove(値) data.discart(値) data -= {'aaa','bbb'} data.pop() data.clear() |
del data['ccc'] data.pop('aaa') data.pop('aaa','デフォルト値') data.clear() |
|
含むかの判定 | 'aaa' in data 'ccc' not in data |
'aaa' in data 'ccc' not in data |
||
別のデータ構造への変換 | ■文字列 文字列.split(デリミタ) デリミタ.join(data) |
■文字列 data = ('aaa','bbb') data >>>('aaa','bbb') str1,str2 = data str1 >>>'aaa' str2 >>>'bbb' |
■リスト list = lest(data.keys()) list >>>'aaa','bbb' list = lest(data.values()) list >>>'100','200' list = lest(data.items()) list >>>[('aaa','100'),('bbb','200')] |
|
要素数取得 | len(data) | len(data) | len(data) | len(data) |
ソート | sort(data) sorted(data) |
無し イミュータブル | 無し 並び順の概念無し | |
その他 | ■集合 作成 data1 | data2 data1 & data2 data1 - data2 data1 ^ data2 ■集合 data1を変更 data1 |= data2 data1 &= data2 data1 -= data2 data1 ^= data2 |
■キーの一覧 data.keys() ■値の一覧 data.values() ■キーと値の組の一覧 data.items() |
Python フォルダ内再帰検索 ファイル入出力 文字列型日付の比較方法 サンプル
■今回やりたかった事
フォルダ内にある複数のログファイルを参照して、
ログの最終出力日時が〇月〇日以降のファイル名をリスト化する
■ソース
import glob #フォルダパス取得用ライブラリ
import os #テキスト操作用ライブラリ
import datetime #日付時刻チェック用ライブラリ
print('start')
#取込対象フォルダ指定
files = glob.glob(r'C:/Users/tera_log/Desktop/tmp_folder/*.tsv', recursive=True)
#結果出力ファイル名指定
output_file_name = r'C:/Users/tera_log/Desktop/tmp_folder/target_file_name.txt'
#出力ファイル初期化 ※必須ではない処理
f = open(output_file_name, 'w')
f.close()
#指定したフォルダ内のファイルパス分ループ
for file_path in files:
#対象ファイルを開き、全行読み込む
tmp_file = open(file_path)
tmp_lines = tmp_file.readlines()
tmp_file.close()
#行分ループして日付最大値を取得
max_date = datetime.date(2000,1,1)
for line in tmp_lines:
#日付を取得 ※日付の出力形式は「2000-01-01」
file_date = datetime.date(int(line[0:4]),int(line[5:7]),int(line[8:10]))
if max_date < file_date:
max_date = file_date
#最大値と対象日付を比較し、日付が2021-01-01以降ならならファイル名をテキストファイルに出力する
target_date = datetime.date(2021,1,1)
if max_date >= target_date:
print(os.path.basename(file_path) + '\t' + str(max_date))
#outputファイルを開く
f = open(output_file_name, 'a')
f.write(os.path.basename(file_path) + '\t' + str(max_date) + "\n")
f.close()
print('end')
■注意点
<Windowsのフォルダパス指定方法>
・¥(バックスラッシュ)だとエスケープ処理される
・/(スラッシュ)は普通に使えるので、スラッシュが便利
・シングルクォートの前にrを付けると、特殊文字も文字として扱う(raw文字列)
例)r'C:/Users/tera_log/Desktop/tmp_folder/*.tsv'
<文字列を切り取る部分>
・文字列型変数に『[α:β]』を付けるとαからβまでを切り取りできる
α:開始位置 ※0始まり
β:終了位置 ※0始まりでカウントした文字数プラス1する
例)最初の4文字を取得したい場合は[0:4]を指定する
※日付の出力形式は「2000-01-01」
tmp_string = '2000-01-01'
print(tmp_string[0:4])
>>>2000
python print文の使い方
■入力した文字を出力
print('hello world')
--------------------------
■カンマ区切りで、複数出力 ※出力は半角スペース区切りになる
print('aaa','bbb')
--------------------------
aaa bbb
■複数個printを書くと改行して出力される
print('aaa')
print('bbb')
--------------------------
aaa
bbb
■end='_' を書くと、改行の代わりに区切り文字を指定できる
print('aaa',end='x')
print('bbb',end='x')
print('ccc',end='x')
--------------------------
aaaxbbbxcccx