【初心者向け/ITスクール 65日】Pythonの基礎一覧3
はじめに
今日は、ITスクールに通った65日目の日で、今日学んだ知識を記事にシェアしたいと思います。本記事が、ITを勉強を始めた方々にもロードマップになればいいと思います。
今日は、昨日の続きで、PythonのOOPを勉強し、JAVAとの違いも勉強しました。
最後にxml parsingも実習してみましたが、簡単で楽でした。
Pythonのimport方法
import package.module
import animal.pet
d = animal.pet.Dog("dog1",7)
d.printInfo()
import package.module as nickname
import animal.pet as ap
d = ap.Dog("dog2,8")
d.printInfo()
from package.module import class(or function)(一番楽)
from animal.pet import Dog
d = Dog("dog3", 3)
d.printInfo()
from package.module import class(or function) as nickname
from animal.pet import Dog as dd
d =dd("dog4",1)
d.printInfo()
if name == "main": このmodule(.py)でのみ実行されるコードを意味します。
Pythonの多重継承
Javaは一つのクラスしか継承できないが、Pythonはクラスも多重継承が可能です。
class Avengers:
def __init__(self,realName):
self.realName = realName
def attack(self):
print("attack")
def printInfo(self):
print(self.realName)
###########################################
class Human:
def __init__(self,age):
self.age = age
def eat(self):
print("yummy")
def attack(self):
print("human attack")
def printInfo(self):
print(self.age)
attackのように継承することが被ののる場合、先に継承したAvengersのattackを継承します。humanのattackを継承したい場合、マニュアルで作成する必要があります。
class Ironman(Avengers,Human):
def __init__(self,realName,age):
Avengers.__init__(self,realName)
Human.__init__(self, age)
def attack(self):
Human.attack(self)
def printInfo(self):
Avengers.printInfo(self)
Human.printInfo(self)
###############################################
if __name__ =="__main__":
i = Ironman("Tony Stark", 40)
i.attack()
i.eat()
i.printInfo()
human attack // attackをOverridingしない場合avengerのattackを継承
yummy
Tony Stark
40
datetime
# 現在の時間
now = datetime.today() #(_datetime X)
print(now)
# 特定な時間
yesterday = datetime(2003,10,18)
print(yesterday)
print(type(yesterday))
print(yesterday.year)
print(yesterday.month)
print(yesterday.day)
str -> datetime
randomDate = input("yyyymmdd:")
randomDate = datetime.strptime(randomDate, "%Y%m%d")
datetime -> str
date = datetime.strftime(randomDate,"%d/%m")
print(date)
yyyymmdd:19930216
16/02
Pattern
datetime関連のformatです。
-
%Y
: 年(4桁) -
%y
: 年(下2桁) -
%m
: 月 -
%d
: 日 -
%H
: 時間(24時間制) -
%I
: 時間(12時間制) -
%p
: AMまたはPM -
%M
: 分 -
%S
: 秒 -
%a
: 曜日(短い形式、例: 'Sun') -
%A
: 曜日(長い形式、例: 'Sunday')
ExceptionHandling
try:
x = int(input("x : "))
y = int(input("y : "))
z = x//y
print(z)
l = [1,23,456]
print(l[y])
except Exception as asdf: # 一括で処理可能
print(asdf) # e.princtraceみたいなエラーの内容出力
# except ZeroDivisionError:
# print("can not divide by zero")
# except IndexError:
# print("there is no index in this list")
else:
print("success")
finally:
print("returnより先に呼び出される")
fstring
{}
formatをより簡単にできるように支援するPython 3.6から支援するformatting
beer = input("beername : ")
bottlescount = int(input("bottlescount : "))
print("I love to drink %s,and I drink it %d bottles everyday" %(beer,bottlescount))
print("----------------------")
この場合、str,intを別に指定する必要がありますが、f{}で簡単にすることができます。
beer = input("beername : ")
bottlescount = int(input("bottlescount : "))
print(f"I love to drink {beer},and I drink it {bottlescount} bottles everyday" )
実数
f = 1.125
# f = 1.135
print(f"{f}") #1.125 / 1.135
print(f"{f:.1f}") #1.1 / 1.1
print(f"{f:.2f}") #1.12 / 1.14
再保のprint(f"{f:.2f}")の結果は1.13ではなく、1.12になります。
文字整列
s1 = "left"
result = f"│{s1:<10}│"
print(result)
s2 = "mid"
result = f"│{s2:^10}│"
print(result)
s3 = "right"
result = f"│{s3:>10}│"
print(result)
│left │ #left空空空空空空 javaは-
│ mid │ #空空空mid空空空
│ right│ #空空空空空right javaはdefault or 0
dick , list
d = {
"name": "beaver",
"age": 100,
"gender": "male"
}
result = f"name: {d['name']}, gender:{d['gender']},age:{d['age']}"
print(result)
name: beaver, gender:male,age:100
n = [100,200,300]
print(f"list : {n[0]}, {n[1]},{n[2]}")
for v in n:
print(f"element : {v}")
list : 100, 200,300
element : 100
element : 200
element : 300
コンマ、曜日
num2 = 1234567890
print(num2)
#1,234,567,890
print(f"{num2:,}")
print("-------------")
date1 = datetime.today()
print(date1)
print(f"{date1:%Y-%m-%d} is on a {date1:%A}.")
#1234567890
1,234,567,890
-------------
#2023-10-19 17:27:52.560282
2023-10-19 is on a Thursday.
File
ファイルからデータを読み込み、プログラムで利用するために使用します。同様に、プログラムで生成したデータをファイル形式で保存することも可能です。
ファイルを開く => 操作(読み込み、書き込み) => ファイルを閉じる(必須!!!)
#1. 파일에 내용 쓰기 (write)
#폴더는 미리 만들어놔야 함 / 파일은 존재하지 않아도 실행시에 파일을 만들어 줌
w : overwrite
file = open("C:/Users/gram/Desktop/t/text.txt","w", encoding="UTF-8")
file.write("test ")
print("finish")
file.close()
a : append
file = open("C:/Users/gram/Desktop/t/text.txt","a", encoding="UTF-8")
file.write("\nappend test")
print("finish")
file.close()
r: read
全体
file = open("C:/Users/gram/Desktop/t/text.txt","r", encoding="UTF-8")
data = file.read()
print(data)
file.close()
test
append test
1 lineずつ
while True:
data = file.readline()
print(data,end="")
if data == "":
break
file.close()
XML Parsing
# -*- coding:utf-8 -*-
from urllib.parse import quote
from http.client import HTTPSConnection
from xml.etree.ElementTree import fromstring
import re
# Naver Open APIのURLとクライアントIDおよびクライアントシークレットキー
# 商品名を入力します。
# XMLデータを解析し、文書のタイトル、最低価格、ブランド、大分類カテゴリ情報を出力します。
q = input("商品名:")
# URLエンコーディングしてサーバーに送信
q = quote(q)
# HTTPリクエストを送信する際、.request()関数を使用してリクエストヘッダーを処理
headers = {
"X-Naver-Client-Id": "xxxxxxxx",
"X-Naver-Client-Secret": "xxxxxxxx"
}
# HTTPS接続の設定
hc = HTTPSConnection("openapi.naver.com")
hc.request("GET", "/v1/search/shop.xml?query=" + q, headers=headers)
# レスポンスを取得
res = hc.getresponse()
resBody = res.read()
# HTML解析関数
def cleanhtml(raw_html):
cleanr = re.compile('<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});')
cleantext = re.sub(cleanr, "", raw_html)
return cleantext
# 解析 (inの隣にイテレーターが必要)
for i in fromstring(resBody).iter("item"):
print(cleanhtml(i.find("title").text))
print(i.find("lprice").text)
print(i.find("brand").text)
print(i.find("category1").text)
print("--------")
Discussion