Home | First | Prev | Next | Last |
$ sudo apt-get update $ sudo apt-get install idle私の環境では、こうすることによって Python が自動的に Python3.6.7 にバージョンアップされました。
$ pythonと打った状態の画面が出ます。
>>>というプロンプターのあとにコマンドをいれていけば、それを実行してくれます。
<form action='show_message.cgi' method='post'> Password: <input type='password' name='passwd' /> <input type='submit' value='Go' /> </form>この passwd を受け取るために cgi モジュールをインポートして
#!/usr/bin/python # import cgi form = cgi.FieldStorage() mypassword = form.getvalue('passwd')としました。
mymessage = form.getvalue('message')この mymessage には改行が含まれていますので、改行で区切られた配列(リスト) lines に格納しました。Perl では
@lines = split /\n/, $mymessage;と書きましたが、Python では
lines = mymessage.splitlines()となります。Python では、Perl のようにリストの前に @、変数(ヴァリアブル)の前に $ などをつける必要がないので、コードを書きやすいのですが、コードを読むときには、どれがリストで、どれがそうでないのかを区別する必要がありました。
foreach $line (@lines) { print "$line<br />\n"; }としていましたが、Python では次のようにしました。
for line in lines: line = line + '<br />' print(line)for 文のあとにコロン(:)をつけ、print 文にインデントをつけることによって、Perl の大カッコ({ })の役割を果たさせています。
print("<div class='kakikomi'>") for line in lines: line = line + '<br />' print(line) print('</div>)Python では print 文には自動的に改行が加えられますので、Perl のように '\n' を加える必要はありません。逆に改行しない場合は
print("Are you sure? "),と、',' をつける必要があります。
import shutil shutil.copyfile('message.txt', 'message.txt.bak')
with open('message.txt.bak') as inp: lines = inp.readlines() print("<div class='kakikomi'>") for line in lines: line = line + '<br />' print(line) print('</div>')with open 文を使うと、末尾で自動的にファイルを閉じてくれるので、close を書かなくてよいので便利です。
with open('message.txt', mode='w') as out: lines = inp.readlines() # save new message out.write(newline) # save old messages with open('message.txt.bak') as inp: lines = inp.readlines() for line in lines: out.write(line)上の例では、textarea から渡されたデータを newline に加工してから書き込み、それから既存のデータを書き込むようにしました。これによって、ゲストブックの書き込みが新しいものから順に表示されるようになります。
import re string = "After learning Python, I want to make some web applications. <br /><br />Have good one!<br /><br /><br /><br /><br /><br /><br />" while re.search('<br />$',string): string = re.sub('<br />$', '',string)
re.search(パターン,文字列)は Perl では
if ($string =~ /パターン/) {に相当します。パターンに相当するものがあれば '1' を、なければ '0' を返します。上の例では、パターンに相当するものがあるまで 'while' で繰り返しています。
string = re.sub(パターン,置換したい文字列,対象となる文字列)は Perl では
$string =~ s/パターン/置換したい文字列/;に相当します。
string = "5月6日(金)きょうは雨でした。" m = re.search("^([\d]+)月([\d]+)日",string) month = m.group(1) date = m.group(2)としました。これは Perl では
$string =~ /^([\d]+)月([\d]+)日/; month = $1; date = $2;となります。Perl のほうが文字列の扱いがすばやくできるように思いますが、Python にも慣れる必要があります。
import os cmd = "lame --ta 'Mr. Penguin' --tt 'Let It Snow' --ty 2019 wavfile mp3file" os.system(cmd)コマンドを実行し、その戻り値を得るのに、次のようにしました。
import commands cmd = "mp3info -p %S " + mp3file seconds = commands.getoutput(cmd) minutes = int(seconds)//60'mp3info -p %S' は mp3 ファイルの演奏時間を秒単位で得るコマンドです。戻りり値は文字列ですので、分に直す前に 'int' を使って文字列から数値に変換しています。
import subprocess duration = subprocess.check_output(["mp3info","-p %S",mp3file]) seconds = duration.decode() minutes = int(seconds)//60'subprocess' に渡す引数は commands のように文字列ではなく、配列にする必要がありました。また戻り値は「バイト文字列」ですので、'decode' を使って変換する必要がありました。
import glob files = sorted(glob.glob("*.mp3"))とし、ファイルの作成順には
import glob, os files = sorted(glob.glob("*.txt"),key=os.path.getmtime)としました。
dt = os.stat(mp3file).st_mtimeで価をとりましたが、それはエポックタイム(1970年1月1日からの経過秒)でした。ファイルの比較には、それでも良いのですが、表示するためには通常の年月日に変換しなければなりませんでした。それで、次のようにしました。
dt = datetime.datetime.fromtimestamp(os.stat(mp3file).st_mtime) pubdate = dt.strftime('%a %b %H:%M:%S %Y')'strftime' の中の %a, %b, %d は曜日、月、日、%H, %M, %S は時、分、秒、そして %Y は年の表示フォーマットを指定するものです。小文字の %a, %b, %y は短縮形で %A, %B, %Y は非短縮形となります。十二時間制にしたいときは %I と %p を組み合わせて使います。
$ brsaneconfig4 -dで調べてみたら、ネットワーク接続ができているにも関わらず、I/O エラーとなりました。Windows 10 でも試したところ、「スキャナーがビジーです」というメッセージが出て、こちらでも動きませんでした。スキャナードライバーには Brother が1月21日にリリースした brscan4-0.4.7-1 を使っているのですが、MFC-L2750 で問題なく使うことができるということは、MFC-J6920 に固有の問題なのかもしれません。
$ imgp -x 128x128とコマンドを実行したら、
imagename_IMGP.pngというファイルが一気に作られました。
$ imgp -r 45で行うことができました。
$ imgp -cでできました。
$imgp -xpw 126x126
$/ = "\n\n"; @entries = `cat inputfile`;とすると、テキストファイル全体を空行で区切った単位ごとに配列に代入できます。あとは、この配列から次のようにデータを取り出して作業すればよいわけです。
foreach $entry (@entries) { .... }
data = open(input_file, mode='r') contents = data.read() entries = contents.split("\n\n")まず、ファイルを全部読み込み、split にパターンを指定して区切り、それを配列に入れました。パターンで区切られた各エントリーは次のようにして取り出しました。
for entry in entries:
print << "EOM"; <!DOCTYPE html> <head> <title>$month月$date日</title> </head> <body> EOMおなじことを Python でするには、クォテーション・マークを三つ重ねて、次のようにしました。
string = """<!DOCTYPE html> <head> <title>%s月%s日</title> </head> <body>""" %(month, date) print(string)$month と $date の値は % 記号を使って代入しました。
string = "〇一二三四五六七八九" knums = list(string) for knum in knums: print(knum)としてみましたが、1バイトづつしか表示されませんでした。漢数字は UTF-8で 3バイトなので、文字列から 3バイトづづ取り出すようにしてみました。
string = "〇一二三四五六七八九" knums = list(string) for i in range(0, len(s), 3): knum = s[i: i+3] print(knum)range の第1と2項は範囲の最初と最後ですが、第3に増加量を指定しました。
knums = [] for i in range(0, len(s), 3): knum = s[i: i+3] knums.append(knum)これは次のように一行で書くことができます。
knums = [string[i: i+3] for i in range(0, len(string), 3)]
.wrapper { display: grid; grid-template-columns: repeat(4, 150px); grid-template-rows: repeat(3, 125px); grid-gap: 16px; grid-auto-flow: row; width: 650px; margin-left:auto; margin-right:auto; }grid-template-columns と grid-template-rows の repeat(4, 150px) および repeat(3, 125px) はグリッドの幅を 150px、高さを 125px にし、それを横に4つ、縦に3つ配置することを示しています。
<div class='wrapper'> <div>item 1</div> <div>item 2</div> .... <div>item 11</div> <div>item 12</div> </div>などのように書きました。すると、item 1 から 12 までが、グリッドの中に横並びに収まりました。それは
grid-auto-flow: row;と指定していたからで、
grid-auto-flow: column;とすると、縦に並びました。何も指定しないと、grid-auto-flow: row; と同じ、横並びになります。
$ sudo add-apt-repository ppa:alessandro-strada/ppa $ sudo apt-get update $ sudo apt-get install google-drive-ocamlfuse $ google-drive-ocamlfuse $ mkdir ~/google-drive $ google-drive-ocamlfuse ~/google-drive
Home | First | Prev | Next | Last |