Skip to content

Instantly share code, notes, and snippets.

@Drunkar
Last active July 25, 2016 09:50
Show Gist options
  • Save Drunkar/104c64b4a616a0993ac8 to your computer and use it in GitHub Desktop.
Save Drunkar/104c64b4a616a0993ac8 to your computer and use it in GitHub Desktop.

python tips

  • 例外処理
try:
    print("hogehoge")
except Exception as e:
    print(e)
  • ファイル操作
# coding: utf-8

import os
import shutil

ROOT = "/path/to/your/data_folder"
files = os.listdir(ROOT)
for file in files:
    try:
        if "." not in file:

            # サブフォルダの中身にファイルが2つ以上無いなら削除
            second_files = os.listdir(ROOT + "/" + file)
            if len(second_files) <= 1:
                shutil.rmtree(ROOT + "/" + file)

            # 2つ以上ある場合は親フォルダに移動
            else:
                for second_file in second_files:
                    os.rename(ROOT + "/" + file + "/" + second_file, ROOT + "/" + second_file)
                os.rmdir(ROOT + "/" + file)

    except Exception as e:
        print(e)


    print(file)

  • ワイルドカードに一致するファイルを削除
import os
import glob
for file inglob.glob("hoge.*"):
    os.remove(file)
  • データファイルの振り分け
# coding: utf-8

import os
from collections import Counter

ROOT = "/path/to/your/data_folder"
files = os.listdir(ROOT)

people = []

for file in files:
    people.append(file[:-9])

people_counter = Counter(people)
people = list(set(people))

os.mkdir(ROOT + "/train")
os.mkdir(ROOT + "/test")


for person, cnt in people_counter.most_common():

    # 半分のデータをtrainに、残りをtestに回す
    moved_count = 0
    for file in files:
        if file[:-9] == person:

            # 最初の半分はtrainに移動
            if moved_count < cnt / 2:
                os.rename(ROOT + "/" + file, ROOT + "/train/" + file)
            else:
                os.rename(ROOT + "/" + file, ROOT + "/test/" + file)

            moved_count += 1
  • 特定の文字列に囲まれた部分を正規表現で抜き出す
#coding: utf-8

import re

RAW_FILE = "raw_text.txt"
OUT_FILE = "urls.csv"

def main():
    r = re.compile("\"url\":\"(.+)\",")

    urls = []
    with open(RAW_FILE, "r") as fi:
        for i, line in enumerate(fi):
            matched = r.search(line.rstrip())
            if matched:
                urls.append(matched.group(1))

    urls = list(set(urls))
    # print(urls)
    print(len(urls))

    with open(OUT_FILE, "w") as fo:
        fo.write("\n".join(urls))


if __name__ == '__main__':
    main()
  • リストの中身をすべて文字列化
a = [1,2,3,4,5]
a_str = map(str,a)
  • コマンドライン引数
import argparse

parser = argparse.ArgumentParser(description="他クラスロジスティック回帰")
parser.add_argument("-train", default="train.csv", help="data for train")
parser.add_argument("-test", default="test.csv", help="data for test")
parser.add_argument("-result", default="", help="result output for kaggle")
parser.add_argument("-class_label", default="label", help="識別クラスのカラム名")
parser.add_argument("-id_label", default="id", help="idのカラム名(結果ファイル出力に使用)")
parser.add_argument("-learning_rate", default=0.1, help="学習率")
parser.add_argument("-l2_lambda", default=0.001, help="正則化項の係数")
parser.add_argument("-weights_json_input", default=None, help="重みを記録したファイル(読み込み)")
parser.add_argument("-weights_json_output", default="weights.json", help="重みを記録したファイル(書き出し)")

args = parser.parse_args()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment