スキップしてメイン コンテンツに移動

[保存版]Python入門 基礎を5分でおさらい

enter image description here

時間が空くと、忘れてしまいがちな、Pythonの基礎をおさらいしましょう。
基礎の詰め合わせをご賞味ください。
これを最後まで読めば、あなたとPythonの思い出が蘇ることでしょう。

変数

明示的に宣言する必要なし。
最初に変数に値を代入した時点で、宣言される模様。

a = 1

基本のデータ型

Pythonでよく使うデータ型です。Pythonのデータ型は他にも色々ありますが、とりあえずこれだけ抑えておきましょう。

123         # 整数(int)
123.5       # 浮動小数点数(float)
"ABC"       # 文字列(str)
True/False  # ブール値(bool)
(1, 2, 3)   # タプル(tuple)
[1, 2, 3]   # リスト(list)
{'key': 1}   # 辞書(dict)
set([1,2,3]) # セット(set)

条件分岐

Pythonの条件分岐の書き方は、他の言語と大体同じです。ただしJavaなどでelse ifと書く部分は、Pyhonではelifと書くのがポイント。

条件式の末尾には、: (コロン)を付けます。

if a == 1:
    print("a=1")
elif a == 2:
    print("a=2")
elif a >= 3 and a % 2 == 0:
    print("偶数")
else:
    print("その他")
    print("a=" + str(a))

論理演算子には、and or not を使う

三項演算子

みんな大好き? な三項演算子。Pythonでも使えます。

【構文】
変数 = <Trueの時の代入値> if <条件式> else <Falseの時の代入値>

x = "成人" if age >= 20 else "未成年"

上の処理をJavaで書くと、x = age >= 20 ? "成人" : "未成年"のようになります。

比較演算子

Pythonで使える比較演算子です。他の言語と同じです。

演算子 意味
== 等しい
< より小さい
> より大きい
<= 以下
>= 以上
!= 等しくない

演算子

Pythonで使える演算子です。これも他の言語と同じです。
変わった所で、//で除算と小数点の切り捨てが一発ができるので、コードがスマートになりそうです。

演算子 演算
+ 加算
- 減算
* 乗算
/ 除算
// 除算(小数点以下を切り捨て)
% 剰余
** べき乗

条件分岐 (if文)

Pythonの条件分岐は、少し書き方にクセがあります。

基本の条件分岐 (if文)

Pythonでのif文はif <条件式>:の形式で記述します。

n = 1
if n == 1:
  print("n=1")

if 〜 else

n = 1
if n != 1:
  print("n!=1")
else:
  print("n=1")

if 〜 elif 〜 else (複数条件)

C言語、Javaなどにおけるelse ifは、Pythonではelifで書く。

n = 2
if n == 1:
  print("n==1")
elif n == 2:
  print("n==2")
else:
  print("nは1、2以外")

andまたはorで条件式を複数指定

a = 1
b = 5
if a == 1 and b == 5:
  print("複数条件に一致")

# もちろん「if a == 1 or b == 5:」のように書くことも可能

if文を1行で書く

:(コロン)の後ろに続けて条件にマッチした場合の処理を書く事が可能

n = 1
if n == 1: print("n=1")

繰り返し

for文

  • 配列を繰り返し
for i in [0,1,2,3,4,5]:
  print(i)
  • range()で指定された数を繰り返し
# 0〜5(計6回繰り返し)
for i in range(6):
  print(i)
  
# 1〜5(計5回繰り返し)
for i in range(1, 6):
  print(i)
  • 繰り返し処理で、要素のインデックスが欲しい場合 (enumerate)

enumerate関数を使用すると、ループのインデックス(カウンタ)が取得出来る。

for i, value in enumerate(["A","B","C"]):
  print("index=" + str(i) + " value=" + value)
  • break (ループを途中でやめる)
for i in range(6):
  print(i)
  if i == 3:
    break
  • continue (次のループ処理に移る)
for i in range(6):
  if i == 3:
    continue
  print(i)

while文

i = 0
while i < 6:
  print(i) 
  i += 1

ちなみに、カウンタのインクリメントは i++にしたい所ですが、Pythonでは出来ません。

文字列処理

文字列結合

  • stringの連結
# +(プラス)で文字列を連結
print( 'チャーシュー' + 'ラーメン' + '食べたいな' )

# 文字列リテラルを並べてもOK
print( 'チャーシュー''ラーメン''食べたいな' )

# 複数行に渡る文字列結合は、バックスラッシュで連結
s = 'aaa'\
    'bbb'\
    'ccc'
print(s)
  • string + int の連結
# intは、str()で文字列に変換してから連結
print( 'ラーメン ' + str(100) )

文字の切り取り

s = "abcd"
sub = s[1:3]  #-> "bc"

文字列の分割

文字列を「,」 (カンマ)で区切って、リストで取得する例

str = "りんご,バナナ,プリン"
str.split(",")
 #-> ['りんご', 'バナナ', 'プリン']

区切り文字を指定して、リストを文字列に変換

str_list = ['Python', 'Hello', 'World']
','.join(str_list)
 #-> 'Python,Hello,World'

置換

src = "Hello World"
dst = src.replace('World', 'Hello')
print(dst)
#-> "Hello Hello"

フォーマット (format)

a = "私の名前は %s です。 自宅警備院 %d 年目です!" % ("山田太郎", 5)

%s は文字、%d は整数、%f は浮動小数点、%x は16進数、%o は8進数
%は %%でエスケープする

print "|%5s|" % 'ABC'        #=> |  ABC| : 右寄せ5文字分
print "|%-5s|" % 'ABC'       #=> |ABC  | : 左寄せ5文字分
print "|%5d|" % 123          #=> |  123| : 右寄せ5桁
print "|%-5d|" % 123         #=> |123  | : 左寄せ5桁
print "|%+5d|" % 123         #=> | +123| : 符号付き
print "|%5.2f|" % 1.23       #=> | 1.23| : 全体桁数.少数点以下の桁数
print "|%05d|" % 123         #=> |00123| : 0埋め

文字数を取得

len("abc")  #-> 3

空文字判定 (Empty判定)

Pythonには、文字列の空文字判定を行う専用関数はありません。そのため、以下2つの書き方で空文字判定を行います。

  • len で判定するやりかた
s = ""  # チェック対象がNoneの場合、TypeErrorが発生する
if len(s) == 0:  #
  print("空文字です")
  • not で判定するやりかた
s = ""  # Noneでも正しく空文字判定できる
if not s:  
  print("空文字です")

空白の除去 (strip)

Pythonで空白を除去する場合はstrip()関数を使う。(他の言語でのtrim()相当)

  • 前後の空白を除去(strip)
s = "   123   "
s.strip()  #-> "123"
  • 前方の空白を除去(lstrip)
s = "   123   "
s.lstrip()  #-> "123   "
  • 後方の空白を除去(rstrip)
s = "   123   "
s.rstrip()  #-> "   123"

リスト(list)・タプル(tuple)・ディクショナリ(dict)

リスト (list)

  • 宣言
lst = [1, 2, 3]
  • 値の取得/設定
# インデックスを指定して値を取得
lst[0] # -> 1

# 要素の中身を変更 
lst[0] = 2

# リストの件数を取得
lenVal = len(lst)
  • リストの最後(一番後ろ)の値を取得する

Pythonでは、配列のインデックスにマイナスを渡すと、配列の後ろからアクセスできる

lst = [1, 2, 3]
lst[-1]  #=> 3
  • 範囲指定で値を取得する

Pythonでは、配列インデックスの範囲を指定して、値を取得することができます。

lst = [1, 2, 3, 4, 5]

#開始位置と終了位置を指定
lst[1:3]  #=> [2,3]

#開始位置を指定して、それ以降の値を取得
lst[1:]  #=> [2,3,4,5]

#終了位置を指定して、それより前の値を取得
lst[:4]  #=> [1,2,3,4]
  • 検索
lst = ["A", "B", "C", "C"]

# Aのインデックスを調べる
lst.index("A") #=> 0

# 同じ値が複数存在する場合、先頭のインデックスが返ってくる
lst.index("C") #=> 2

# リストに存在しない値を指定すると、エラーになる
lst.index("D") #=> ValueError: 'D' is not in list
  • 追加

値を1件追加

lst = [1, 2, 3]
lst.append(4)   #=> [1, 2, 3, 4]

別のリストの要素を追加

lst = [1, 2, 3]
lst.extend([4, 5, 6])  #=> [1, 2, 3, 4, 5, 6]

リストを連結して、新しいリストを作成する

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
lst3 = lst1 + lst2 + [7, 8]
  #=> [1, 2, 3, 4, 5, 6, 7, 8]
  • 削除

リストのクリア (clear)

lst.clear()

指定した位置の要素を削除し、値を取得 (pop)

# 指定した位置の要素を削除
val = lst.pop(0);

# pop()関数の引数を省略した場合、末尾の要素が削除される
val = lst.pop();

指定した値と同じ要素を検索し、見つかった最初の要素を削除 (remove)

lst = ["AA", "CC", "BB", "CC"]

# 先頭の"CC"を削除
lst.remove("CC")
  #=> ["AA", "BB", "CC"]

範囲指定で要素を削除

# delを使った削除も行える
lst = [0, 1, 2, 3, 4]

# 2番目の要素を削除
del lst[1]
  #=> [0, 2, 3, 4]
  
# 1〜2番目の要素を削除
del lst[1:3] 
  #=> [0, 3, 4]

指定した値と同じ要素を検索し、見つかった最初の要素を削除

タプル(tuple)

# 宣言
a = (1, 2, 3)

# 要素から値を取得
print( a[0] ) # -> 1

# タプル(tuple)は、要素の値を後から変更できない
a[0] = 2  # -> TypeError: 'tuple' object does not support item assignment

セット (set)

セットは、値の重複がない集合型。
宣言は、要素を波カッコ{}でくくって書くか、set()関数を使って宣言します。

# 波カッコでくくって宣言する方法
a = {1, 2, 3, 4, 5}

# set()関数で宣言する方法
a = set([1, 2, 3, 4, 5])

# 空のセットを宣言する場合は、set()関数で宣言する
a = set()

試しに値を重複させて宣言してみると…

a = {100, 200, 200}
a.add(300)
a.add(100)

print(a)
#-> {100, 200, 300}  ※重複したデータは削除されている
  • 値の追加
a.add(300)
  • 値の削除
a.add(300)
  • セット (set) -> リスト (list)
a = {1, 2, 3, 4, 5}
list(a)
#-> [1, 2, 3, 4, 5]
  • セット (set) -> タプル (tuple)
a = {1, 2, 3, 4, 5}
tuple(a)
#-> (1, 2, 3, 4, 5)

ディクショナリ(dict)

  • 宣言
a = { 'name': "山田太郎", 'age': 20, 'address': "日本のどっか" }
  • 値の取得・設定
# 値の取得
print( a['name'] )   # -> "山田太郎"

# 値の設定
a['name'] = "鈴木太郎"
  • 要素の削除

すべての要素をクリアする

d = {'key1': 1, 'key2': 2, 'key3': 3}
d.clear()
print( len(d) )
#-> 0

キーを指定して要素を削除

# キーを指定してその要素を削除し、削除された要素の値を取得
remove_value = d.pop('key1')

# delを使用して要素を削除
del d['key1']
  • キーの存在チェック
'name' in a.keys()  #=> true
'tel' in a.keys()   #=> false

# 複数のキーの存在チェックを行う場合 
a.keys() >= {'name', 'age'}   #=> true
a.keys() >= {'name', 'tel'}   #=> false
  • キーが存在するか分からない状態で、ディクショナリにアクセスする

dict[key]で存在しないキーにアクセスすると、KeyErrorが発生する。

print( a['存在しないキー'] )
  #-> KeyError

事前にキーの存在チェックを行えばよいが、アクセスするキーの数が多いと、煩雑なコードになってしまう。
そんな時は、下のように書けば1行で記述する事ができる。

a = { 'key1': "値1", 'key2': "値2" }

a.get('key1', "デフォルト値")
  => "値1"

a.get('key3', "デフォルト値")
  => "デフォルト値"

※ キーが存在する場合は、そのキーに設定されている値。
 存在しない場合は、第2引数で指定したデフォルト値が返る。

  • ディクショナリ(dict)のループ
a = {"key1": 1, "key2": 2}

# キーに対してループ
for k in a.keys():
  print(k)
#-> key1
#-> key2
  
# 値に対してループ
for v in a.values():
  print(v)
#-> 1
#-> 2

# キーと値のタプルでループ
for k,v in a.items():
  print(k, v)
#-> key1 1
#-> key2 2

リスト内包表記

リストのフィルタ、演算など、リストに対する一括処理を、簡潔に記述できます。

  • フィルタ

偶数値だけを取り出すサンプル

ary = [1, 2, 3, 4]
[n for n in ary if (n % 2) == 0]  #-> [2, 4]
  • 演算

各要素を2乗するサンプル

ary = [1, 2, 3, 4]
[n**2 for n in ary]  #-> [1, 4, 9, 16]

タプル内包表記

リスト内包表記とほぼ同じ。(戻り値がタプル型となる)

偶数値だけを取り出すサンプル

ary = [1, 2, 3, 4]
(n for n in ary if (n % 2) == 0)  #-> (2, 4)

set内包表記

Pythonのset型でも内包表記が使えます。

{num for num in range(5)}

dict内包表記

以外と知られていませんが、dict型でも内包表記が使えます。以外と便利なので覚えておいて損はないと思います。キー:値の形式で指定します。

{str(num):num for num in range(5)}

関数

【構文】 def 関数名( 引数, 引数, ...):

def my_func(n):
  return n * 2

my_func(2) # -> 4

デフォルト値を持つ引数

def my_func(n1, n2 = 2):
  return n1 * n2

my_func(2)    # -> 4
my_func(2, 3) # -> 6

クラス

class MyClass:
    PI = 3.14  #クラス変数
    
    def __init__(self):
        """
        コンストラクタ
        """
        self.name = "" #インスタンス変数
        
    def method1(self):
        """
        引数なしのメソッド
        """
        print("method1")

    def method2(self, args1):
        """
        引数1つのメソッド
        """
        print("method2 args1=" + args1)

クラスにプライベート関数を定義する

    def __private_method(self, args1):
        print("プライベート関数")

クラスメソッドを定義する

    @classmethod
    def class_method(cls):
        print("クラス関数")

静的(Static)関数を定義する

    @staticmethod
    def static_method():
        print("スタティック関数")

コンストラクタに引数を渡す

class MyClass:
    def __init__(self, args1, args2):
        self.p1 = args1
        self.p2 = args2


cls = MyClass(1, 'A')
print(cls.p1) #-> 1
print(cls.p2) #-> 'A'

日付

Pythonで日付を扱う場合、datetime モジュールをインポートします。
主に以下の4つのクラスを用途によって使い分けます。

datetime.datetime : 日時(日付+時刻)
datetime.date : 日付だけ
datetime.time : 時刻だけ
datetime.timedelta : 経過時間

日付+時刻を扱う (datetime.datetime)

  • 現在時刻を取得する
from datetime import datetime

datetime.now().strftime("%Y/%m/%d %H:%M:%S")
#-> 2018/12/05 12:00:00
  • 日時を指定して datetimeオブジェクトを取得する
datetime(year=2018, month=1, day=30, hour=12, minute=0, second=0, microsecond=0, tzinfo=None)

日付を扱う (datetime.date)

  • 今日の日付を取得する
from datetime import date

date.today().strftime("%Y/%m/%d")
#-> 2018/12/05

日付 -> 文字列変換 (日付フォーマット)

日付オブジェクト(date, datetime)を、文字列にフォーマットするには、strftime(format)関数を使います。

datetime.now().strftime("%Y/%m/%d %H:%M:%S")

よく使いそうな、日付書式のディレクティブは以下の通りです。

ディレクティブ 意味
%w 曜日を10進表記した文字列を表示します。0 が日曜日で、6 が土曜日を表します。
%d 0埋めした10進数で表記した月中の日にち。
%m 0埋めした10進数で表記した月。
%y 0埋めした10進数で表記した世紀無しの年。
%Y 西暦 (4桁) の 10 進表記を表します。
%H 0埋めした10進数で表記した時 (24時間表記)。
%I 0埋めした10進数で表記した時 (12時間表記)。
%p ロケールの AM もしくは PM と等価な文字列になります。
%M 0埋めした10進数で表記した分。
%S 0埋めした10進数で表記した秒。
%f 10進数で表記したマイクロ秒 (左側から0埋めされます)。
%z UTCオフセットを +HHMM もしくは -HHMM の形式で表示します (オブジェクトがnaiveであれば空文字列)。
%Z タイムゾーンの名前を表示します (オブジェクトがnaiveであれば空文字列)。
%j 0埋めした10進数で表記した年中の日にち。
%U 0埋めした10進数で表記した年中の週番号 (週の始まりは日曜日とする)。新年の最初の日曜日に先立つ日は 0週に属するとします。
%W 0埋めした10進数で表記した年中の週番号 (週の始まりは月曜日とする)。新年の最初の月曜日に先立つ日は 0週に属するとします。

全てのディレクティブを知りたい場合は、以下の公式ドキュメントを参照してください。

Python - 基本的な日付型および時間型 (公式ドキュメント)

日付の加減算

datetimeモジュールの、timedeltaを使って、日付・時刻の加減算を行う。

from datetime import datetime, timedelta
d = datetime.now()

#3日後
d + timedelta(days=3) 

#3日前
d - timedelta(days=3)   # これでもOK ⇒ d + timedelta(days=-3)  

#1日と1時間加算
d + timedelta(days=1, hours=1) 

timedeltaの引数に指定可能なものは、以下の通り

timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

日付の妥当性チェック

datetime.strptime()を使用し、変換に失敗してエラーになるかで、判定する。

try:
  tmp = datetime.strptime("<チェックを行う日付文字列>", "%Y/%m/%d %H:%M")
except ValueError:
  #不正な日付の場合、ValueErrorが発生する

型判定

型名を取得

type("ABC")   
 #-> <class 'str'>

型判定

type("ABC") is str
  #-> True

複数の型の内、いずれかに一致するか判定する場合 、inと複数の型をタプルで指定する。(OR条件)

type("ABC") in (int, str)
  #-> True

型変換

文字列 → 整数に変換

int("123")    # -> 123
int(1.5)      # -> 1
int(True)     # -> 1
int(False)    # -> 0
int("ABC")    # -> ValueError: invalid literal for int() with base 10: 'ABC'
int("123.5")  # -> ValueError: invalid literal for int() with base 10: '123.5

※実数を変換すると、小数点以下が切り捨てられる模様

文字列/整数 → 実数に変換

float("123.5")  # -> 123.5
float(2)        # -> 2.0

数値 → 文字列に変換

str(100)     # -> "100"
str(123.5)   # -> "123.5"
str(True)    # -> "True"
str(False)   # -> "False"

None

他の言語での nullは、PythonではNoneで表現する。
Noneかどうかの判定は、以下の通り。

if value is None:
    # Noneの時の処理

例外

例外をキャッチ

try:
    a = 5 / 0  #ゼロ除算を意図的に発生させる
except ZeroDivisionError:
    print("ZeroDivisionError!!")
  • 例外の情報を取得する場合
try:
    a = 5 / 0  #ゼロ除算を意図的に発生させる
except ZeroDivisionError as e:
    print("type:{0}".format(type(e)))
    print("args:{0}".format(e.args))
    print("message:{0}".format(e.message))
    print("{0}".format(e))
  • 全ての例外をキャッチする
try:
    #例外が発生しそーな処理
except:
    print("エラー発生!!")
  • 組み込み例外

Pythonであらかじめ定義されている例外

(公式) 5. 組み込み例外
https://docs.python.jp/3/library/exceptions.html

例外をスローする

raise ValueError

独自の例外を作成

独自の例外は、Exceptionを継承したクラスを作成する。
Exceptionの派生クラスを継承するのでもOK。

class ValidateError(Exception):
    """
    チェックでエラーが発生した時にスローされる例外
    """
    def __init__(self, code, message):
        super().__init__()
        self.code = code
        self.message = message

上の独自例外をスローしてみる

raise ValidateError("E0001", "エラーメッセージ")

ファイル関連操作

Pythonでよく使うファイル系操作について、まとめました。

ファイルの存在確認

指定したパスに、ファイルまたはディレクトリが存在するかチェックするには、以下のように書きます。

import os
path = "path/to/file"
os.path.exists(path) #ファイルが存在する場合、Trueが返る

チェック対象をファイルだけに絞りたい場合は、以下のように書きます。

os.path.isfile(path)

ディレクトリの存在チェックは、以下のように書きます。

os.path.isdir(path)

UUID

import uuid

#UUID version 1(MAC アドレスを利用)
u1 = str(uuid.uuid1())    # => '68496776-02b1-11e9-8c17-d46a6aae23b8'

#UUID version 4(完全ランダム)
u4 = str(uuid.uuid4())    # => 'bd48b541-5401-42be-a467-b974976f5a62'

sleep処理(スリープ)

他の言語と同じように、Pythonでもsleepで処理を一時停止することができます。

import time
time.sleep(秒数)

sleep(スリープ)する時間をミリ秒で指定する

Pythonのtime.sleepには、秒でしたスリープ時間を渡せないため、ミリ秒(1/1000秒)で指定します。

import time
time.sleep(100 / 1000)  #100ミリ秒スリープする

コメント

  • 行コメント
#コメントです
  • ブロックコメント
"""
ブロックコメント
ブロックコメント
"""

Pythonにはブロックコメントはありません。
代わりに、複数行の文字列リテラルで代用します。

コードのエンコーディング

日本語を扱うコードの場合、ファイルの先頭にエンコーディングを指定する

UTF8の場合

# coding: UTF-8

その他のエンコーディング

# coding: Shift_JIS
# coding: cp932
# coding: EUC-JP

おわりに

時間が空いたり、他の言語をやっていたりすると、意外と基本を忘れますね。
これを見て、一気に復習しましょう!

<関連記事>

MacにPython3をインストールする! (サクッとインストールしたい人向け)

Mac環境に、Python3を簡単にインストールする方法を紹介しています。

Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]

Flaskの開発で、ソースを更新したら、自動的にWebアプリをリロードする方法です。

Flaskで REST API開発する! 直ぐに実行できるサンプルコードで解説 【Python Tips】

Pythonの軽量Webフレームワークである、FlaskでREST APIを作るまでの流れを、紹介します。

Flask-RESTful を使って、REST APIを作る【Python Tips】

Flaskと、Flask-RESTfulを使って、REST APIを作ります。
Flask-RESTfulを使うと、オブジェクト思考な感じで、REST APIが作れます。

Pythonで小数点の四捨五入/切り捨て/切り上げを行う

Pythonのdecimalモジュールを使って、小数点の丸めを行う方法です。

pipコマンドまとめ! 忘れても思い出せばいい! 【Python TIPS】

よく使うpipコマンドをまとめました。

Pythonで正規表現を使って数値/英字チェックを実装する (コピペ用)

数値/半角英字などのチェック処理を、Pythonの正規表現を使って実装します。
コピペで簡単に使えるようになっています。

コメント

このブログの人気の投稿

axiosの使い方まとめ (GET/POST/例外処理)

axiosの使い方まとめ (GET/POST/例外処理)最近何かとよく使うJavaScriptでAJAX通信を行うaxiosについて、簡単に使い方をまとめました。GETリクエストをaxiosで送るまずはGETリクエストをaxiosで送る方法です。const res =await axios.get('/users') console.log(res.data)分割代入の記法を使うと、以下のようにも書けますconst{data}=await axios.get('/users') console.log(data)クエリパラメータ (URLパラメータ)を指定クエリパラメータを指定する方法は2つあります。1つ目は、axios.getに指定するURLに直接記述する方法です。axios.get('/user?id=123')2つめは、axios.getの第2引数に、オプション指定する方法です。axios.get('/user',{ params:{ id:123}})POSTリクエストをaxiosで送る次はPOSTリクエストをaxiosで送る方法です。JSON形式でPOSTするJSON形式でPOSTする場合は、axios.postの第2引数に、送信するデータをJavaScriptオブジェクトで指定します。const res =await axios.post('/user',{ id:123, name:'Yamada Tarou'})application/x-www-form-urlencoded形式でPOSTするapplication/x-www-form-urlencoded形式でPOSTする場合は、URLSearchParamsを使います。var params =newURLSearchParams() params.append('id',123) params.append('name','Yamada Tarou')const res =await axios.post('/user', params)スポンサーリンク axios でファイルをアップロードする画像などのファイルを、…

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決する

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決するタイトルの通りですが、Windows 8 以降では Windows Form アプリケーションで、コントロールの ImeMode に Katakana や KatakanaHalf を設定しても、カタカナになってくれません。なぜ ImeMode が効かないのか?Windows 8 以降、IME Mode の切り替えは、ユーザー単位で切り替わるようになった為、アプリから IME Mode 制御が出来ないようになりました。
(IME をON にした場合、常に ひらがな モードになます)※ Windows 7までは、IME Modeの切り替えはアプリ単位で行われていた為、問題なくアプリから IME制御が行えました。スポンサーリンク 対処方法Windows 8 以降、IMEの制御は、InputScope クラスの利用が推奨されています。
しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。
(Windows Form はもう使うな!という事でしょうか (涙) )結論としては、コントールパネルの設定で、IMEの制御をユーザ単位から アプリ単位に変更する事ができます。
これで、Windows Formアプリでも 従来通りIMEの制御を行う事が出来ます。おわりにこの方法だと、アプリをインストールする端末すべてに設定が必要となり、とっても面倒です。。。
しかし、今の所これしか方法がない状態です。
これからは Windows Formではなく、WPFや Windows ストアアプリで作れという事ですかね (^^;)

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]MailKitを使ってメールを送るサンプルコードです。(C#)UTF8/iso-2022-jpのエンコーディング指定、GMail/YahooのSMTPサーバで送るなど、4つのサンプルコードでMailKitの使い方を紹介します。MailKitって何?2017年に.NET標準のSystem.Net.Mail.SmtpClientが廃止予定となり、Microsoftより今後はオープンソースライブラリである、MailKitに置き換えるとアナウンスがありました。既にSmtpClientは非推奨になっており、今後は廃止されていきます。現在、SmtpClientを使用したソースコードには、Visual StudioからMailKitを使うよう警告が出るようになっています。さっそく、MailKitを使ってメールを送信するサンプルコードを作っていきます。UTF8でメールを送信文字エンコーディングを、UTF8でメールを送信するサンプルコードです。
MailKitは、デフォルトの文字エンコーディングがUTF8なっている為、シンプルなコードでメールを送信する事ができます。var host ="<smtp server name>"; var port =25;// or 587using(var smtp =new MailKit.Net.Smtp.SmtpClient()){//SMTPサーバに接続する smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);//認証が必要な場合は、以下のコメントを解除//smtp.Authenticate("<id>", "<password>");//送信するメールを作成する var mail =new MimeKit.MimeMessage(); var builder =new MimeKit.BodyBuilder(); mail.From.Add(new MimeKit.MailboxAddress("",&quo…