while(<>){ print; }
と同等のスクリプトはどう書くのか?import sys for line in sys.stdin: print(line),
または
import sys
for line in sys.stdin:
line = line.rstrip('[\r\n\t ]')
print(line)
このimport sysはないとエラー。print(line),
のカッコはpython2.5はなくてもいいけど、3.0以降必要なのでつけておく。
3.0では最後の , で改行しないという方法は無効なので、
rstrip(右側を s/[\r\n\t ]// する)する方法も作った。python3.0でそのまま通る。このとき import re 要らないのは意外。
sys.stdout.write("abc2")
なら改行しない出力がpython3、2共通で使えそうだじゃあ次、Perlの
while(<>){ s/([0-9]+)/_number$1_/g; print; }
と同等のスクリプトはどう書くのか?import sys, re
for line in sys.stdin:
line = re.sub('([0-9]+)', r'_number\1_', line)
print(line),
line = re.sub('([0-9]+)', r'_number\1_', line)
は引数にMatchPattern, replace, origStr, countを取り、返り値にnewStr。r'_number\1_'の r は raw stringの略。pythonはシングルクォートでも \n が改行になるので、
\\nと書くか、 r をつける。後方参照は \1 と使う。
countを省略すると Perlのglobal置換と同じ。countのところに「,1」とすると最初の一組のみ置換。
じゃあ次、ファイルの中身を読み出すには?
import sys
f = open('test.txt', 'rb')
for line in f :
line = line.rstrip() #改行などを削除
print(line)
f.close()
ファイルの中身を空白またはタブで区切って読み込む
for line in open('test.txt', 'rb') :
line = line.rstrip()
ilist = line.split(" ") #stringは空白のみ
print(ilist)
同じことだがファイルを1行づつでなくまとめて読み込む
from var_dump_lib import var_dump
import re
lines = open('test.txt', 'rb').read() #1つの文字列になっている。Perlみたいに配列にはなっていない
print(lines)
var_dump(lines)
#for line in lines.split("\r\n") :
for line in re.split("[\r\n]+", lines) :
ilist = re.split("[ \t]+", line) #reなら空白・タブともに
print(ilist)
from A import B でファイルA(ここでは var_dump_lib.py) から関数Bを読み出す。
もし import var_dump_lib だけ書いたら
var_dump_lib.var_dump(a)としないと関数が呼べない。
つまりファイル名がnamespaceになる。
ファイルの書き込みは
# coding: UTF-8
str = open('test.txt', 'rb').read()
import re
str2 = re.sub(r'([0-9]+)', r'数字\1', str)
open('test2.txt', 'wb').write(str2)
0 件のコメント:
コメントを投稿