クラスの練習として、ファイルについてのクラスをつくってみました。
#
# -*- coding:sjis -*-
#
import os,sys,win32com.client
oFSO=win32com.client.Dispatch("Scripting.FileSystemObject")
class File:
def __init__(self, path):
self.set_path(path) #フルパス
self.set_fdr() #フォルダ名
self.set_name() #ファイル名
self.set_root() #フルパスの拡張子よりも前部分
self.set_ext() #拡張子(.を含む)
self.set_drv() #ドライブ名(:を含む)
self.set_isfile() #存在するか
self.set_path83() #フルパス8.3形式名。存在時のみ。
self.set_name83() #ファイル8.3形式名。存在時のみ。
self.set_size() #ファイル容量(バイト)
def set_path(self, s): self.path = s
def set_fdr(self): self.fdr = os.path.dirname(self.path)
def set_name(self): self.name = os.path.basename(self.path)
def set_root(self): self.root = os.path.splitext(self.path)[0]
def set_ext(self): self.ext = os.path.splitext(self.path)[1]
def set_drv(self): self.drv = os.path.splitdrive(self.path)[0]
def set_isfile(self): self.isfile = os.path.isfile(self.path)
def set_path83(self):
self.path83=""
if self.isfile:
self.path83 = oFSO.GetFile(self.path).ShortPath
def set_name83(self):
self.name83 = os.path.basename(self.path83)
def set_size(self):
self.size=0
if self.isfile:
self.size = os.path.getsize(self.path)
if __name__=="__main__":
sIn=""
if len(sys.argv)>1: sIn = sys.argv[1]
p = File(sIn)
print "path = "+p.path
print "fdr = "+p.fdr
print "name = "+p.name
print "root = "+p.root
print "ext = "+p.ext
print "drv = "+p.drv
print "isfile = "+str(p.isfile) #bool型
print "path83 = "+p.path83
print "name83 = "+p.name83
print "size = "+str(p.size) #int型
-----
例1:存在するファイルを指定した場合
path = C:\Documents and Settings\a23456789.html
fdr = C:\Documents and Settings
name = a23456789.html
root = C:\Documents and Settings\a23456789
ext = .html
drv = C:
isfile = True
path83 = C:\DOCUME~1\A23456~1.HTM
name83 = A23456~1.HTM
size = 112
例2:存在しないファイルを指定した場合
path = C:\Documents and Settings\b23456789.html
fdr = C:\Documents and Settings
name = b23456789.html
root = C:\Documents and Settings\b23456789
ext = .html
drv = C:
isfile = False
path83 =
name83 =
size = 0
2011年1月29日土曜日
2011年1月22日土曜日
python:辞書オブジェクト
d={} #辞書dのクリア
d={key:val, ...} #キーと値をコロンでつなぐ。要素区切りはカンマ。
len(d) #辞書の件数
d=dict(L) #リスト→辞書(リストはキーと値の2要素リストであること)
例)d=dict([[1,"a"], [2,"b"]]) → {1:"a", 2:"b"}
d[key]=val #値設定
a=d[key] #値取得(キーが無いときはエラー)
a=d.get(key, "無い時の値") #値取得(キーが無いときは指定値返却)
if a in d: #キーの有無判定
for (key, val) in d.items(): #キーと値の組み合わせのループ
for key in sorted(d.keys()): #キーのループ(並び替えて)
for val in d.values(): #値のループ
kvSum=dict([[k,v] for k, v in zip(KeysL, ValsL)])
→{k1:v1, ...} #キーリストと値リストの組み合わせ辞書作成
d[key]=d.get(key,0)+cnt #キー別に値を累積
b=d.copy() #辞書のコピー
d={key:val, ...} #キーと値をコロンでつなぐ。要素区切りはカンマ。
len(d) #辞書の件数
d=dict(L) #リスト→辞書(リストはキーと値の2要素リストであること)
例)d=dict([[1,"a"], [2,"b"]]) → {1:"a", 2:"b"}
d[key]=val #値設定
a=d[key] #値取得(キーが無いときはエラー)
a=d.get(key, "無い時の値") #値取得(キーが無いときは指定値返却)
if a in d: #キーの有無判定
for (key, val) in d.items(): #キーと値の組み合わせのループ
for key in sorted(d.keys()): #キーのループ(並び替えて)
for val in d.values(): #値のループ
kvSum=dict([[k,v] for k, v in zip(KeysL, ValsL)])
→{k1:v1, ...} #キーリストと値リストの組み合わせ辞書作成
d[key]=d.get(key,0)+cnt #キー別に値を累積
b=d.copy() #辞書のコピー
2011年1月16日日曜日
町字の表記 順番に割り当てられた地名
・丁目(ちょうめ)
例)名護市役所
沖縄県名護市 港 一丁目 1番1号
これは全国に多数存在する表記方法。
・丁(ちょう) ※丁目に相当
例)堺市北区役所
堺市北区 新金岡町 5丁 1-4
「5丁目」ではなく「5丁」で正しい。市内に多数あり。
・町目(ちょうめ)
例)京都大宮丸太町郵便局
京都府京都市上京区 丸太町通大宮東入 一町目 857
一町目、二町目、・・・などあり。
・条(じょう)
例)北海道札幌市手稲区役所
札幌市手稲区 前田1条 11丁目 1-10
例)北海道旭川市役所
北海道旭川市 6条通 9丁目
・番町(ばんちょう)
例)名張百合が丘郵便局
三重県名張市 百合が丘東1番町 15
他にもつつじが丘、桔梗が丘、梅が丘などで1番町、2番町、・・・などあり。
・地割(ちわり)
例)八幡平(はちまんたい)市役所
岩手県八幡平市 大更 第35地割 62番地
・いろは
例)七尾市役所
石川県七尾市 袖ヶ江町 イ部 25
例)羽咋郵便局
石川県羽咋市 川原町 メ 136-4
「メ」は、いろはにほへと・・・あさきゆめみし・・の「め」。
例)八街(やちまた)市役所
千葉県八街市 八街ほ 35-29
例)匝瑳(そうさ)市役所
千葉県匝瑳市 八日市場ハ 793番地2
・十干 (甲乙丙丁戊己庚辛壬癸)
読みは、こう、おつ、へい、てい、ぼ、き、こう、しん、じん、き。
または、陰陽五行思想(wikipedia)に基づいて、
きのえ、きのと、ひのえ、ひのと、つちのえ、つちのと、かのえ、かのと、みずのえ、みずのと。
例)魚沼中条郵便局
新潟県十日町市 中条 甲 872-6
なかじょう こう。
郵便番号簿によると、中条庚は「なかじょう かのえ」。
例)香川県土庄町役場
香川県小豆郡土庄町 甲 559-2
・十二支 (子丑寅卯辰巳午未申酉戌亥)
例)十日町高田郵便局
新潟県十日町市 子 377-7
十日町市には十二支すべてが揃っている。
十干十二支は地番の一部として扱う地域もある。
例)名護市役所
沖縄県名護市 港 一丁目 1番1号
これは全国に多数存在する表記方法。
・丁(ちょう) ※丁目に相当
例)堺市北区役所
堺市北区 新金岡町 5丁 1-4
「5丁目」ではなく「5丁」で正しい。市内に多数あり。
・町目(ちょうめ)
例)京都大宮丸太町郵便局
京都府京都市上京区 丸太町通大宮東入 一町目 857
一町目、二町目、・・・などあり。
・条(じょう)
例)北海道札幌市手稲区役所
札幌市手稲区 前田1条 11丁目 1-10
例)北海道旭川市役所
北海道旭川市 6条通 9丁目
・番町(ばんちょう)
例)名張百合が丘郵便局
三重県名張市 百合が丘東1番町 15
他にもつつじが丘、桔梗が丘、梅が丘などで1番町、2番町、・・・などあり。
・地割(ちわり)
例)八幡平(はちまんたい)市役所
岩手県八幡平市 大更 第35地割 62番地
・いろは
例)七尾市役所
石川県七尾市 袖ヶ江町 イ部 25
例)羽咋郵便局
石川県羽咋市 川原町 メ 136-4
「メ」は、いろはにほへと・・・あさきゆめみし・・の「め」。
例)八街(やちまた)市役所
千葉県八街市 八街ほ 35-29
例)匝瑳(そうさ)市役所
千葉県匝瑳市 八日市場ハ 793番地2
・十干 (甲乙丙丁戊己庚辛壬癸)
読みは、こう、おつ、へい、てい、ぼ、き、こう、しん、じん、き。
または、陰陽五行思想(wikipedia)に基づいて、
きのえ、きのと、ひのえ、ひのと、つちのえ、つちのと、かのえ、かのと、みずのえ、みずのと。
例)魚沼中条郵便局
新潟県十日町市 中条 甲 872-6
なかじょう こう。
郵便番号簿によると、中条庚は「なかじょう かのえ」。
例)香川県土庄町役場
香川県小豆郡土庄町 甲 559-2
・十二支 (子丑寅卯辰巳午未申酉戌亥)
例)十日町高田郵便局
新潟県十日町市 子 377-7
十日町市には十二支すべてが揃っている。
十干十二支は地番の一部として扱う地域もある。
2011年1月10日月曜日
町字の表記 接尾語
町字名の末尾に付く共通する文字を思いつくまま書いてみます。
・町(まち、ちょう)
例)富山県富山市役所
富山市 新桜町 7-38
これは全国に多数存在する表記方法。
・丁(ちょう)
例)和歌山中央郵便局
和歌山県和歌山市 一番丁 4
数字地名だけでなく、鷺ノ森堂前丁 など市内に多数あり。
・通(とおり)
例)尼崎郵便局
兵庫県尼崎市 昭和通 2丁目 11-1
・免(めん)
例)松浦市役所
長崎県松浦市 志佐町里免 365
他にも今福町坂野免、鷹島町中通免など多数。
・触(ふれ)
例)壱岐市役所
長崎県壱岐市 郷ノ浦町本村触 562
他にも芦辺町箱崎中山触、石田町池田西触、勝本町大久保触など多数。
・郷(ごう)
例)西海市役所
長崎県西海市 大瀬戸町瀬戸樫浦郷 2222
他にも西海町天久保郷、崎戸町蠣浦郷など多数。
・町(まち、ちょう)
例)富山県富山市役所
富山市 新桜町 7-38
これは全国に多数存在する表記方法。
・丁(ちょう)
例)和歌山中央郵便局
和歌山県和歌山市 一番丁 4
数字地名だけでなく、鷺ノ森堂前丁 など市内に多数あり。
・通(とおり)
例)尼崎郵便局
兵庫県尼崎市 昭和通 2丁目 11-1
・免(めん)
例)松浦市役所
長崎県松浦市 志佐町里免 365
他にも今福町坂野免、鷹島町中通免など多数。
・触(ふれ)
例)壱岐市役所
長崎県壱岐市 郷ノ浦町本村触 562
他にも芦辺町箱崎中山触、石田町池田西触、勝本町大久保触など多数。
・郷(ごう)
例)西海市役所
長崎県西海市 大瀬戸町瀬戸樫浦郷 2222
他にも西海町天久保郷、崎戸町蠣浦郷など多数。
2011年1月4日火曜日
町字の表記(3)
(2.町字が2段階 の続き)
2-3.旧市区町村+旧大字
例)三瀬郵便局
佐賀県佐賀市 三瀬村 三瀬 2634-1
3.町字が3段階
3-1.区+大字+丁目
岩手県奥州市役所
岩手県奥州市 水沢区 大手町 1丁目 1
「水沢区」は合併特例法に基づく地域自治区の名称。
「水沢区大手町」が大字名。
3-2.旧市区町村+大字+丁目
徳島県鳴門市役所
徳島県鳴門市 撫養町 南浜 字東浜 170
「撫養町」は市区町村合併前の旧町名(元は市区町村レベルの名称)。
「南浜」は市区町村合併前の旧大字名。
現在は、「撫養町南浜」が大字名。
(番外).通り名1+通り名2+方向+大字
京都市中京区役所
京都市中京区 西堀川通 御池 下る 西三坊堀川町 521
「西堀川通り」と「御池通り」の交差点から南へ行ったところにある「西三坊堀川町」である。京都市内は別項を立てたい。
ここまででわかるとおり、町字名の区切りレベルは地域ごとにさまざまである。
鳴門市役所の例では、町字の第1レベルが合併前は「南浜」で合併後は「撫養町」という旧市区町村レベルとなるが、暗黙で同一レベル扱いしがちである。
地域ごとの統計情報を比較する際には注意が必要である。
同一地域でも合併前後の経年変化がわからなくなることがある。
2-3.旧市区町村+旧大字
例)三瀬郵便局
佐賀県佐賀市 三瀬村 三瀬 2634-1
3.町字が3段階
3-1.区+大字+丁目
岩手県奥州市役所
岩手県奥州市 水沢区 大手町 1丁目 1
「水沢区」は合併特例法に基づく地域自治区の名称。
「水沢区大手町」が大字名。
3-2.旧市区町村+大字+丁目
徳島県鳴門市役所
徳島県鳴門市 撫養町 南浜 字東浜 170
「撫養町」は市区町村合併前の旧町名(元は市区町村レベルの名称)。
「南浜」は市区町村合併前の旧大字名。
現在は、「撫養町南浜」が大字名。
(番外).通り名1+通り名2+方向+大字
京都市中京区役所
京都市中京区 西堀川通 御池 下る 西三坊堀川町 521
「西堀川通り」と「御池通り」の交差点から南へ行ったところにある「西三坊堀川町」である。京都市内は別項を立てたい。
ここまででわかるとおり、町字名の区切りレベルは地域ごとにさまざまである。
鳴門市役所の例では、町字の第1レベルが合併前は「南浜」で合併後は「撫養町」という旧市区町村レベルとなるが、暗黙で同一レベル扱いしがちである。
地域ごとの統計情報を比較する際には注意が必要である。
同一地域でも合併前後の経年変化がわからなくなることがある。
2011年1月3日月曜日
python:定数、エスケープシーケンス
pythonの規定の定数、エスケープシーケンス。
以下、「\」は半角¥マーク。
\\ 「\」文字そのもの
\' シングルクオーテーション
\" ダブルクオーテーション
\a ベル
\b バックスペース
\f 改ページ
\r キャリッジリターン
\n 改行
\t 水平タブ
\v 垂直タブ
\N{name} Unicode データベース中で名前 name を持つ文字
\uxxxx 16ビットの16進数値xxxxを持つUnicode文字
\Uxxxxxxxx 32ビットの16進数値xxxxxxxxを持つUnicode文字
\ooo 8進数oooを持つASCII文字
\xhh 16進数hhを持つASCII文字
\0 NULL
\+(改行) 文字列を途中で改行する
パス名の要素の区切り文字
os.sep #windowsでは 半角¥
ファイル名と拡張子を分ける文字
os.extsep #windowsでは半角ピリオド
行末文字
os.linesep #windowsでは「\r\n」。キャリッジリターンとラインフィード
円周率
import math # mathモジュール
math.pi #3.1415926535897931
注意点は、mathモジュールをimportしてから使うこと。以下同様。
自然対数の底
math.e #2.7182818284590451
整数の最大値 マシン環境によって異なる。
sys.maxint #私の環境では2147483647
整数の最小値 マシン環境によって異なる。
-sys.maxint - 1 #私の環境では-2147483648
以下、「\」は半角¥マーク。
\\ 「\」文字そのもの
\' シングルクオーテーション
\" ダブルクオーテーション
\a ベル
\b バックスペース
\f 改ページ
\r キャリッジリターン
\n 改行
\t 水平タブ
\v 垂直タブ
\N{name} Unicode データベース中で名前 name を持つ文字
\uxxxx 16ビットの16進数値xxxxを持つUnicode文字
\Uxxxxxxxx 32ビットの16進数値xxxxxxxxを持つUnicode文字
\ooo 8進数oooを持つASCII文字
\xhh 16進数hhを持つASCII文字
\0 NULL
\+(改行) 文字列を途中で改行する
パス名の要素の区切り文字
os.sep #windowsでは 半角¥
ファイル名と拡張子を分ける文字
os.extsep #windowsでは半角ピリオド
行末文字
os.linesep #windowsでは「\r\n」。キャリッジリターンとラインフィード
円周率
import math # mathモジュール
math.pi #3.1415926535897931
注意点は、mathモジュールをimportしてから使うこと。以下同様。
自然対数の底
math.e #2.7182818284590451
整数の最大値 マシン環境によって異なる。
sys.maxint #私の環境では2147483647
整数の最小値 マシン環境によって異なる。
-sys.maxint - 1 #私の環境では-2147483648
2011年1月2日日曜日
python:リストの内包表記
[x for x in L]
forからリストLまでがひと区切り。forでLから取り出されたxが、forの前に渡される。
例)0~3までの各3倍の値のリスト
[0, 3, 6, 9] = [x*3 for x in range(4)]
[x for x in L if x < 10]
for部で取り出された要素のうち、その後ろif部で評価され真だったものだけが、forの前に渡される。
[x for L2 in L1 for x in L2]
1つ目のforでL1から取り出されたL2が、2つ目のforに渡され、 そこから取り出されたxが、1つ目のforの前に渡される。
[[x[1], x[0]] for x in L]
要素2つのListの前後を入れ替える
forからリストLまでがひと区切り。forでLから取り出されたxが、forの前に渡される。
例)0~3までの各3倍の値のリスト
[0, 3, 6, 9] = [x*3 for x in range(4)]
[x for x in L if x < 10]
for部で取り出された要素のうち、その後ろif部で評価され真だったものだけが、forの前に渡される。
[x for L2 in L1 for x in L2]
1つ目のforでL1から取り出されたL2が、2つ目のforに渡され、 そこから取り出されたxが、1つ目のforの前に渡される。
[[x[1], x[0]] for x in L]
要素2つのListの前後を入れ替える
登録:
投稿 (Atom)