リスト内の重複を排除したりする便利関数(Python3)

Python書いている時、毎回こういう関数書いているような気がしたので、少し紹介してみようと思います。

リスト内の重複している要素を削除する


s = ['a', 'b', 'c', 'c', 'd', 'd', 'd', 'e']
ans = list(set(s))
>>>
['c', 'd', 'e', 'b', 'a']

ただしこのやり方だと順番は保証されません。順番そのままにしたい場合は正攻法を使うしかないかと。for文でブン回したりenumerate関数使って順番を強制的に覚えさせとく…とか?

指定したディレクトリ以下の全てのファイルを返す


import os
def get_file_list(target_dir):
""" 指定したディレクトリ内のファイルを再帰的に返す関数(例:log/) """
file_list = []
# 一覧取得
for (root, dirs, files) in os.walk(target_dir):
for file in files:
file_list.append(os.path.join(root, file).replace("\\", "/"))
return file_list
print(os.getcwd())
lists = get_file_list('log/')
print(lists)
>>>
['log/app.log', 'log/ghostdriver.log']

os.walk()関数が肝ですね。再帰的に検索してくれるすごいやつです。

h抜けのURLを修復する


import re
def url_assist(url):
""" h抜きのURLを修復する """
search_result = re.match('(ttps?|ftp)(://[-_.!~*\'()a-zA-Z0-9;?:@&=+$,%#]+)', url)
if search_result:
fixed_url = "h" + url
return fixed_url
return url

(主に)2ちゃんで役に立つ

URLに含まれる”/“のindexを全てリストで返す


url = 'https://www.kiwi-bird.xyz/'
[i for i, j in enumerate(url) if j == "/"]
>>>
[5, 6, 24]

lxmlを使ってサイトのtitleを返す関数


import requests
import lxml.html
def get_title(root):
""" HTMLページのタイトルを返す """
pre_title = lxml.html.fromstring(root)
raw_title = pre_title.xpath("//title/text()")[0]
return raw_title.strip()
r = requests.get("https://www.kiwi-bird.xyz/")
get_title(r.text)
>>>
'Operation KiWi'

終わり

たいしたことなくてすいません。楽しくて毎日コード書いてるんですが、入門Pythonが手放せなくて困っています…買ってからもう1年以上経つのにw

永遠の初心者 ここに眠る

入門 Python 3

入門 Python 3

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

コメントを残す

メールアドレスが公開されることはありません。