LoginSignup
11
11

More than 5 years have passed since last update.

Python覚書

Posted at

Pythonを使う機会があったので、つらつら覚書をしておきます。
バーーっとメモしたので読みにくいかも。。

  • 設定値をconfigから読み込む
  • 実行オプションの指定
  • csvファイルの読み込み
  • LISTのmemo
  • ワンライナーのmemo
  • XMLを生成する。
  • requestを生成する

Configの使い方

コンフィグはConfigParserを使用する。

config_path = "./setting.conf"
file = ConfigParser.SafeConfigParser()
file.read(config_path)
conf = init_context.InitContext(file)

コンフィグはこう書いてあって

[host_settings]
host = 192.168.10.10
port = 8080

使うときは
このように指定する

conf.get("host_settings", "host")

実行時のオプション指定

  • オプションの設定

オプションのparserにはOptParserを使うと便利

parser = OptionParser()
parser.usage = "usage: %prog [options] arg1 arg2"
parser.description = "ディスクリプションを書く"
parser.add_option("-f", action="store", type="string", dest="file",help="ヘルプを読んだ時の説明文")
parser.add_option("-d", action="store_true", dest="debug",help="debug mode", default=False)

と書いたら
オプション「-f」を使用すると
オプション-fで指定した引数が
パースすると、destで指定しているfileという識別子で利用できる。
※引数の解析で表すような感じ

オプション「-d」を使用した場合
action="store_true"って指定すると、そのオプション指定があった時、destにTrueを入れる。
defaultはオプション指定しなかった時のデフォルト値

helpで指定したものは、「-h」で実行すると、表示される。

  • 引数の解析

オプションの解析はこんな感じに使う

(options, args) = parser.parse_args(sys.argv)
print options.file

ファイルの存在確認

読み込む前には存在確認を。

os.path.exists(file_path) 

CSVファイルの読み込み

  • ファイルの読み込みオープンとレコードの読み込み
f = open(file_path, 'rb')
reader = csv.reader(f)
  • レコード分繰り返す Dataには配列で各カラムが入ってる
for Data in reader:
    print Data[0]
  • 最後はクローズする
f.close

listのmemo

  • リストに追加する
list.append
  • ディクショナリはmutable、タプルはimmutable
  • データフォーマットは "%s %d" % ("string",number) のように後ろにタプルを追加する。

戻り値の使い方memo

返却値を2つにすることも出来る。
user, name = method()

ワンライナー

[method() for user in users if user.name == "yuta"]

usersのなかのuser要素のnameがyutaだったらmethodを呼ぶ、みたいに書ける。
これと一緒

for user in users :
    if user.name == "yuta":
        method()

Requestの使い方

url = "http://localhost:8080/target"
body = "json or xml"

response = requests.post(url, data=body)

でrequest投げれちゃう

XMLつかうとき

  • XMLの解析
import xml.etree.ElementTree as ET
element_tree  = ET.fromstring(xml_text)            # ここがルートになる。これは文字列をXMLのエレメントに変換してる
code = element_tree.get("code")                    # 変換したから、elementの関数で値を取得できる。この場合はcode属性の値
name = element_tree.find("name_list").get("name")  #この場合はnama_list要素のname属性の値   
  • XMLのbuild
Body = ET.Element("root")
Body.set("name", "yuta")                               #root要素のname属性の値を"yuta"で追加
subbody = ET.SubElement(Body, "age")                   #rootエレメントにage要素を追加。そのオブジェクトをsubbodyに。
subbody.text = 29                                      #subbodyオブジェクトのテキストは、値として設定される
ET.SubElement(Body, "address", {"city": "tokyo"})    #rootオブジェクトに更に追加する場合はこうする。更に追加するときにcity属性、値はSaitamaを追加

こいつの下に更に追加するなら、オブジェクトを変数に取っておく必要があるが(ageの用に)
rootに追加するだけなら、上記でBodyに対して要素はすでに追加されている状態になる。
たとえば、

subbody = ET.SubElement(Body, "age") 
subbody.text = 29            

で、子要素を追加するなら

ET.SubElement(subBody, "birthday_party", {"old": 10, "with_who": "family"})
ET.SubElement(subBody, "birthday_party", {"old": 20, "with_who": "honey"})

こんな感じでやればいい。

作成したXMLを文字列に変換するには、Elementのtostringが使えるが
以下を使えば、encoding='utf-8'がつく。tostringでやっても明記するように指定できない。
※xml_declaration=Trueが指定できない

def to_xml_string(self, element):
    class dummy:
    pass

    data = []
    file = dummy()
    file.write = data.append
    ET.ElementTree(element).write(file, encoding="utf-8", xml_declaration=True)
    return "".join(data)

Elementの使い方は別途まとめたいなぁ

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11