2010年12月24日金曜日

python:スライス操作(slice)

スライス操作は、シーケンス型のオブジェクト(文字型、リスト型、など)の部分を取り出す操作。

部分p = s[開始インデックス : 終了インデックス : 刻み]

s="abcde" として、インデックス値は以下のとおり。

| a  | b | c | d | e |
 0   1   2   3   4   5  左からの位置
-5  -4  -3  -2  -1     右からの位置

s[3]=s[-2]="d"
s[1:3]=s[-4:-2]=s[1:-2]=s[-4:3]="bc"
s[2:]=s[-3:]="cde"
s[:2]=s[:-3]="ab"
s[:] = "abcde"

配列L=["a", "b", "c", "d", "d"] でも、同様。
L[2:]=L[-3:]=["c", "d", "e"] など。

2010年12月21日火曜日

python:listオブジェクト(基本)

リストの基本。

リストの要素は添字で指定可能。
L = ['a', 'b' ,'c'] の場合、

L[0] = 'a'
L[1] = 'b'
L[2] = 'c'

添字を後ろから-1,-2, ...と指定することも可能。
L[-3] = 'a'
L[-2] = 'b'
L[-1] = 'c'

添字の範囲指定も可能。添字のスタートとエンドはコロンで区切る。
L[1: 2]  = ['b', 'c']
L[-2: -1] = ['b', 'c']
L[1:-1]  = ['b', 'c']

リストの要素はデータ型が混在してもよい。

L=[a, "b", 50]
L[0] 変数aの値(データ型はこれだけではわからない)
L[1] 文字型のb
L[2] 数字型の50

2010年12月20日月曜日

python:listオブジェクト

リストオブジェクト(list)は、複数要素の集まり。要素の変更可能。

L=[]    リストのクリア
L=[v,w,...]    リストに値v、w、...を設定

L=list(s)    シーケンス型→リスト sが文字列なら1文字ずつの要素になる
L=csv.split(",")  csv文字列→リスト

len(L)    リストの要素数
L.count(v)   要素vの件数

v = L[i]     i番目の値の取得(最初の要素は0番目)
i = L.index(v)  値vの最初の要素位置(最初の要素は0番目)
w = L.index(v,i,j)  同上。ただし、wはi番目以上、j番目未満。

L.append(v)    値をリストの最後に追加
L.insert(v,i)    値をi番目の要素として追加
L.pop(i)    i番目の要素を削除。i未指定の場合、最後の要素を削除
if v in L:    値vの有無判定

L = L1+L2    リストの結合
L.sort()    リストそのものの並び替え。ただし、昇順。
L.sort(key=int)    同上。ただし、値を数値として並び替え
L.sort(reverse=True)    同上。ただし、降順。
L2 = sorted(L1)   リストを並び替えてコピー。元のリストL1はソート前と変わらず。
L2 = sorted(set(L1))   リストを重複削除して並び替え。

L1 = L2   リストのポインターのコピー。この操作後にL1を変更するとL2も変わる。
L1 = L2[:]  リストの値のコピー。この操作後にL1を変更してもL2は変わらない。

2010年12月16日木曜日

python:ファイル名の接頭語、接尾語チェック

# -*- coding: shift_jis -*-
#
import os,sys

def PreSufChk(sIn, sPre="", sSuf=""):
    """ファイルの接頭語と接尾語のチェック
    Args:
        sIn:  入力ファイル
        sPre:    接頭語(prefix)
        sSuf:    接尾語(suffix)
    Returns:
        接頭語、接尾語が一致するか(bool)
    """
    return ((sIn.upper().startswith(sPre.upper())) \
        and (sIn.upper().endswith(sSuf.upper())))
   
def main():
    sIn="abc.txt"
    print PreSufChk(sIn, "a", "txt")  #True
    print PreSufChk(sIn, "b", "txt")  #False
    print PreSufChk(sIn, "a", "csv")  #False
    raw_input()
    return True
   
if __name__=="__main__": main()


-----

・文字列.upper() 大文字に変換する。小文字に変換は.lower()
 上記例では、引数の大文字小文字に関わらず、同じ値として扱う。

・a.startswith(sPre) aにsPreが前方一致したらTrue
 a.endswith(sSuf)  aにsSufが後方一致したらTrue

・\ は、1つの文が複数行にまたがるときの継続行の意味。

2010年12月11日土曜日

町字の表記(2)

先走って 「大字なし地域」 を抜かしてしまった。

0.町字が0段階

例)長野県 南箕輪村役場
長野県上伊那郡南箕輪村 4825-1

「大字」が無い地域が全国で100ヶ所ほど存在する。
2000年頃には150ヶ所以上あったが、平成の大合併でだいぶ減った。

大字なし地域の歴史的な経緯の概要は以下のとおり。

1973年(明治6年)の地租改正で課税対象が収穫物から土地になり、土地に徴税用の管理記号が必要になった。
そして、「○○村 123番地」などという「町村名+番地」という表記になり、住所表記に流用されることになる。(市区町村がまだ法制化される前で、この時点でまだ現在の「市」は無い)
この当時70,000以上あった村は現在の大字ほどの領域。
その後、市区町村合併があり、この地租改正時の村はその多くが大字になり、大字名などの地域名として新設、分割、消滅、再使用などを複雑に繰り返し現在に至る。

では、以下の場合はどうなるか?
(1)地租改正当時以降、市区町村合併を一度もせず、町字名の整理などをしていない。
(2)市区町村合併しても「合併後町村名+番地」の表記を続ける。

それが現在の「大字なし地域」だ。
ちなみに例で挙げた南箕輪村は1875年(明治8年)に発足してから一度も市区町村合併をしていない。

今日はこのあたりで。

2010年12月10日金曜日

町字の表記(1)

町字とは、住所構造のうち、”市区町村”より後で”番地号”より前の部分、と定義しておく。
表記パターンは一筋縄ではいかない。まず基本形から。

1.町字が1段階

1-1.大字
 例)小林市役所
 宮崎県小林市 細野 300

1-2.小字
 例)福知山市役所
 京都府福知山市 字内記 13番地の1

(おまけ)丁目
 例)下田市立下田小学校
 静岡県下田市 五丁目 3番1号
※これは通常の大字の下の”丁目”ではなく、正しくは”五丁目”という大字である。下田市には、1~6丁目まで揃っている。


2.町字が2段階

2-1.大字+丁目
 例)東京都新宿区役所
 東京都新宿区 歌舞伎町 1丁目 4番1号

2-2.大字+小字
 例)宮城県名取市役所
 宮城県名取市 増田 字柳田 80

ここまではよく目にする町字の構造である。
次回、さらなる迷宮へ続く。

2010年12月7日火曜日

なぜ東京特別区には市が付かないのか?

政令指定都市では、都道府県+市+区 という表記だ。
例)
北海道 札幌市 中央区
大阪府 大阪市 中央区

東京特別区では、都道府県+区という表記だ。
例)
東京都 中央区

これでは特別区全体を表す地域呼称が無く、変則的な感じは免れない。
では、なぜ東京特別区には市が付かないのか?

それは、1943年に戦時法制の一環として、旧東京府と旧東京市が合併したため。
東京都制(wikipedia)

現在は1都1道2府43県だが、当時は1道3府43県。
つまり、東京は府であり、区部にも市があり、東京の区は京都大阪の区と同列だった。
例)
東京府 東京市 日本橋区

確かにこれは現在の京都府京都市などと同じ住所表記だ。

この状態から、旧東京府と旧東京市が合併することになり、県レベルの次が区になってしまった。
例)
東京府 東京市 日本橋区と京橋区が合併して、「東京都 中央区」になった。

それにしても、都道府県レベルと市区町村レベルの合併というのは無理やりである。

2010年12月6日月曜日

都道府県コードと市区町村コード

都道府県には2桁、市区町村にはこれに3桁付加して計5桁のコード値が、日本工業規格(JIS)で定められている。
JIS規格
都道府県コード:JIS X 0401
市区町村コード:JIS X 0402

例)東京都千代田区 13101
"13"が東京都を示し、"101"が東京都の中では千代田区を示す。

市区町村合併や政令指定都市の区割りなどの都度、総務省によってコード値の新設廃止が行われ、常にメンテナンスされている。

コード値は以下で確認できる。

・政府の公式サイト
標準地域コードを探す(政府統計の総合窓口)
1970年以降の特定時点で存在する市区町村コードをダウンロード可能。

・総務省の公式サイトにあるリンク情報
地方公共団体コード住所(財団法人地方自治情報センターの公式サイト)
この財団は住民基本台帳ネットワークシステムの運営元である。
市区町村コード5桁にチェックデジット1桁を付加した6桁のコード値になっている。

・個人のサイト
市町村コード一覧表(イッシー氏のサイト)
非公式ながら非常によくまとまっている。過去の廃止分も載っている。私個人としては最もお薦めのサイト。

2010年12月5日日曜日

pythonでフォルダ内のファイル数取得

覚え書き。

# -*- coding: shift_jis -*-
#
import os,sys

def GetFileNum(sInFdr):
    """ファイル数取得
    Args:
        sInFdr:入力フォルダ
    Returns:
        ファイル数
    """
    if not os.path.isdir(sInFdr): return 0
    i=0
    for root, dirs, files in os.walk(sInFdr):
        i+=len(files)
    return i

if __name__=="__main__":
    sInFdr=sys.argv[1]
    print GetFileNum(sInFdr)

2010年12月4日土曜日

2010年の県境変更(2)

2010年で最も広い面積の県境変更は、2010.03.01の群馬県太田市と埼玉県深谷市の間の変更である。

南前小屋地区は埼玉県深谷市になります。(太田市公式サイト)

南前小屋地区が深谷市へ(深谷市公式サイト) ※pdfファイル

群馬県太田市 → 埼玉県深谷市 : 約1,196,000 m2 140人
埼玉県深谷市 → 群馬県太田市 : 約 362,000 m2  0人(ゴルフ場など)

場所はこのあたり。利根川の流路に従って県境を決めた後、洪水で流路が変わり、大正時代に現在の流路になってから久しく、やっとこの度、県境変更になったとのこと。(深谷市公式サイトより)
中央にかかる橋の東側で利根川の南側部分が南前小屋地区。


大きな地図で見る

2010年12月2日木曜日

2010年の県境変更(1)

昨日(2010.12.01)、都県境の変更があった。

東京都町田市と神奈川県相模原市の間である。

この2市の間を流れる境川(武蔵国と相模国の国境)を挟んで、昔の流路の基づいて複雑に入り組んでいた都県境を、現在の流路に合わせて、上鶴間から淵野辺にかけての2km程にわたり交換しそれぞれ編入した。

行政境界の変更(相模原市公式サイト)

町田市と相模原市との境界変更(町田市公式サイト)

面積は
東京都町田市 → 神奈川県相模原市南区 : 約10500 m2
神奈川県相模原市南区 → 東京都町田市 : 約16900 m2

東京都がほんの僅か広くなった。

でも、2010年前半にはもっと広い面積の県境変更があった。
またの機会に書く予定。