Home | First | Prev | Next | Last |
first_name = "John" last_name = "Smith" print("Hello, %s %s." %(first_name,last_name))
print("Hello, {} {}." .format(first_name,last_name))この方法だと変数を配列番号で繰り返し表示できるので便利です。
print("Hello, {0}, {0} {1}." .format(first_name,last_name))
print(f"Hello, {first_name} {last_name}")引用符の前に「f」をつけるだけで、変数をそのまま「{}」内に記述できますので、プログラムが見やすくなり、エラーを防ぐことができます。
use CGI; use CGI::Carp qw(fatalsToBrowser); my $q = new CGI; $mode = $q->param('answer'); @marked = $q->param('marked');
import cgi import cgitb cgitb.enable() form = cgi.FieldStorage() answer = form.getvalue('answer') mode = form.getvalue('mode') marked = form.getlist('marked')両方共、エラーが出たときに、それがブラウザに表示されるようにしました。Python で数値や文字列をやりとりするには from.getvalue() を、リストをやりとりするには form.getlist() を使います。
print << "EOM"; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My WebApp </title> </head> <body> EOM
print('''<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My WebApp</title> </head> <body>''')
$i = 0 @lines = `cat $file`; foreach $line (@lines) { chomp $line; data[$i] = line; $i++; }
with open(file) as INP: lines = INP.readlines() sum = len(lines) data = list(range(sum)) for line in lines: line = line.strip() data[i] = line i += 1Python ではあらかじめリストを用意する必要があるので、データの個数を取得してから list() 関数で空のリストを作りました。
open INP, "$inpfile"; $/ = '\n\n'; $n = 1 foreach $entry () { chomp $entry; print 'Chapter $n\n'; @items = split /\n/, $entry; $i = 1; foreach $item (@items) { print 'Section $i. $item\n'; $i++; } $n++; }
with open(inpfile) as INP: data = INP.read().split('\n\n') n = 1 for entry in data: entry = entry.strip() print(f'Chapter {n}') items = entry.split('\n') i = 0 for item in items: print(f'Section {i}. {item}') i += 1 n += 1
if ($line =~ /([\d]+)/) { $number = $1; }
number = re.search(r'([\d]+)',line).group(1)
open OUT, '>$outfile'; foreach $line (@lines) { print OUT '$line\n'; } close OUT
with open(outfile,'w') as OUT: for line in lines: OUT.write(f'{line}\n')with ... as 構文を使えば、自動的にファイルを閉じてくれる。
use File::Copy copy($from_file,$to_file);
import shutil shutil.copyfile(from_file,to_file)
if (-e $from_file) { copy($from_file,$to_file); }
if (os.path.isfile($from_file)): shutil.copyfile(from_file,to_file)
subprocess.run(['unoconv','input.odt'])とすればいいのですが、"html2text input.html > output.txt" というコマンドをそのまま subprocess.run のコマンドリストに入れてもエラーとなります。"html2text input.html" の結果が標準出力に指定されているからです。これをファイルに変更するため、次のようにしました。
with open('output.txt', 'w') as out: proc = subprocess.Popen(['input.html', 'output.txt'], env=os.environ, stdout=out, stderr=subprocess.PIPE) stdout, stderr = proc.communicate() retcode = proc.returncode del proc
package main import "fmt" func main(){ //出力結果 fmt.Println("Hello World!!") }これを“hello.go”として保存し、ターミナルで
$ go run hello.goとすると、“Hello World!!”と表示されました。
$ go build hello.goとすると、実行ファイル“hello”が出来ましたので、
$ ./helloで実行しました。
// その月の1日の曜日 dt := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.UTC) first_day := int(dt.Weekday()) // その月の日数 dt2 := time.Date(year, time.Month(month + 1), 0, 0, 0, 0, 0, time.UTC) last_date := dt2.Day()変数 year と month は main で年と月を指定してあります。曜日は、日曜日が 0、月曜日が 1 のように整数で受け取ります。
// 1日が日曜日以外の場合、日付を空欄にする for i := 0; i < first_day; i++ { fmt.Print(" ") } // for date := 1; date <= last_date; date++ { // 日付の前に空白 if (date < 10) { p_date = " " + strconv.Itoa(date) } else { p_date = " " + strconv.Itoa(date) } day = (first_day + date - 1) % 7 if day == 6 { fmt.Println(p_date) } else { fmt.Print(p_date) } } // 月の最後で改行 if day < 6 { fmt.Println("\n") } else { fmt.Println("") }
package main import ( "fmt" "os" "strconv" "time" ) func main() { // 引数の数を確認する if len(os.Args) < 2 { fmt.Println("Specify the year!") os.Exit(1) } // 最初の引数を代入する year, _ := strconv.Atoi(os.Args[1]) for month := 1; month <= 12; month++ { show_sundays(year, month) } } func show_sundays(year, month int) { var p_date string var day int month_names := [12] string {" January", " February", " March", " April", " May", " June", " July", " August", "September", " October", " November", " December"} month_name := month_names[month - 1] // その月の1日の曜日 dt := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.UTC) first_day := int(dt.Weekday()) // その月の日数 dt2 := time.Date(year, time.Month(month + 1), 0, 0, 0, 0, 0, time.UTC) last_date := dt2.Day() fmt.Printf(" %v, %v\n", month_name, year) for i := 0; i < first_day; i++ { fmt.Print(" ") } for date := 1; date <= last_date; date++ { // 日付の前に空白 if (date < 10) { p_date = " " + strconv.Itoa(date) } else { p_date = " " + strconv.Itoa(date) } day = (first_day + date - 1) % 7 if day == 6 { fmt.Println(p_date) } else { fmt.Print(p_date) } } // 月の最後で改行 if day < 6 { fmt.Println("\n") } else { fmt.Println("") } }
$ scratch=$(mktemp -d) $ dpkg -x zoom_amd64.deb $scratch $ dpkg -e zoom_amd64.deb $scratch/DEBIAN $ sed -i -E 's/(ibus, |, ibus)//' $scratch/DEBIAN/control $ dpkg -b $scratch patched_zoom_amd64.deb
$ sudo gdebi patched_zoom_amd64.debとしてインストールしました。gdebi は依存しているファイルを追加してくれるので便利です。
$ dpkg-deb -I zoom_amd64.deb | grep Version
$ sudo /etc/init.d/xrdp startとしてから mstsc を起動すると、Xfce デスクトップを見ることができました。
C:\Apache24\bin\httpd.exeがあり、これをターミナルで実行すると、サーバーが動きました。ただターミナルを閉じるとサーバーも停止します。ドキュメント・ルートは
C:\Apache24\htdocsにありますが、今はユーザ・ディレクトリを使うつもりですので、ここには触れませんでした。
C:\Apache24\conf\httpd.confをエディタで開いて、次の設定をしました。
Define SRVROOT "c:/Apache24" ServerName localhost:80 LoadModule userdir_module modules/mod_userdir.so Include conf/extra/httpd-userdir.conf LoadModule cgi_module modules/mod_cgi.so AddHandler cgi-script .cgi .pyそして、
C:\Apache24\conf\extra\httpd-userdir.confの Directory Options に
ExecCGIを加えました。これで httpd を再起動すると、ユーザ・ディレクトリで Python CGI が使えるようになりました。
#!/usr/bin/pythonでは動いてくれませんでした。それで py コマンドで
> py --list-pathsとして、調べてみました。すると
Installed Pythons found by C:\WINDOWS\py.exe Launcher for Windows -3.9-64 C:\Users\penguin\AppData\Local\Programs\Python\Python39\python.exe *と表示されましたので、次のスクリプトを書いて、動作確認をしました。C:\Users\ の後の penguin は私の場合のユーザ名ですので、この方法を使う方は、自分のユーザ名を入れてください。
#!C:\Users\penguin\AppData\Local\Programs\Python\Python39\python # coding: UTF-8 print("Content-Type: test/html\n") print("My Python CGI works!")
httpd -k installとしました。
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')その通りにしたら、文字化けは解消しました。
with open(this_list,encoding='utf-8') as INP:
with open(this_list,'w',encoding='utf-8') as OUT:以上で文字化けの問題はほぼ解消されました。Linux ではあたりまえにできることが Windows ではさまざまなオプションが必要になることが分かりました。
import re text = "We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defense, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America." search_word = "People" found = re.search(search_word,text) if found: text = text.replace(search_word,f"{search_word}") print(text) else: print("Not found.")といったふうに、検索語が見つかったらそれをハイライトして表示するようにしました。
found = re.search(search_word,text,re.IGNORECASE)としてみました。この場合、検索はできますが、検索語と見つけた文字列とが違うので、ハイライトできません。それで、re.search() の結果から見つけた文字列を取り出せないかやってみました。
print(str(found))としてみたら
<re.Match object; span=(7, 13), match='People'>との結果が示されました。span=(7, 13) は先頭を 0 として、文字列の 7 番目からはじまって 13 番目以前までにマッチした文字列があることを意味します。match='People' というところにマッチした文字列がありますので、これを別の re.search() を使って取り出し、ハイライトできるようにしました。
found = re.search(search_word,text,re.IGNORECASE) if found: found2 = re.search("'([\w]+)'",str(found)) if found2: found_word = found2.group(1) text = text.replace(found_word,f"<font id='hilite'>{found_word}</font>") print(text)
emoji = '🧑🌾' for emoji_part in emoji: binary_string = ''.join(format(ord(i), '08b') for i in emoji_part) decimal_representation = int(binary_string, 2) emoji_hex = hex(decimal_representation) emoji_hex = emoji_hex.replace('0x','&x') print(emoji_hex, end=';') print()
ADDFFADTFDDTAAFTDATFDTTFFTTDTTDFDTDDTADFFFTAADFFTDFAATDFFATDTTAFF以下の情報が得られました。
Barcode ID: 00 [2N] Service Type ID(STID): 700 [3N] Mailer ID(MID): 900000229 [9N] Serial Number: 000000 [6N] Routing Code: 75230504400 [11N]USPS のマニュアルによると Barcode ID は通常は「00」にしておけばよいようです。STID の「700」は 「First-Class Mail, Manual Corrections, Basic or Nonautomation without IV MTR」を指します。MID は USPS のメインシステムに登録してあるもので、もしかしら Dymo 社のものかもしれません。Serial Number は本来ならランダムに生成されるのでしょうが、これはダミーだと思います。Routing Code は Zip Code 5+4 に番地の最後の2桁を Delivery Point として加えた11桁の文字列です。Delivery Point は、通常、番地の最後の2桁です。アパートやユニットの場合は、番地以外の数字になるので、USPS の Zip Code Finder で調べています。郵便局には Routing Code だけ認識してもらえればいいので、あとはダミーの数字になっています。
00700900000229000000として固定し、そのあとに 11桁の Routing Code を加えて、IMb をプリントできるようにしました。
Home | First | Prev | Next | Last |