---
tags: Python
title: 'Python 2021_11_23'
disqus: hackmd
---
[TOC]
---
---
Python Learning
===
## Table of Contents
[TOC]
## 修改檔案的方法(just for 文字檔)
一、修改原檔案方式
```python=
def alter(file,old_str,new_str):
#file:檔名
#old_str:要被替換的字串
#new_str:替換的字串
with open(file,"r",encoding="utf-8") as f1,
open( filename, "w",encoding="utf-8") as f2:
for line in f1:
if old_str in line:
line = line.replace(old_str,new_str)
f2.write(line)
os.remove(file_path) #也可以不刪除
os.rename( filename, filename)
alter(file_path,"(Dx, Dy, Dz)",new_str)
```
## 有視窗介面可選擇file
```python=
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
print("you want to cover file:")
file_path = filedialog.askopenfilename(parent=root)
```
## 物件導向概念
[Python物件導向](https://www.learncodewithmike.com/2020/01/python-class.html)
* 類別(Class)
* 物件(Object)
* 屬性(Attribute)
* 建構式(Constructor)
* 方法(Method)
```pyrhon
# motorcycle type
class Motorcycle:
pass
# car type
class Car:
#建構式
def __init__(self, color, seat):
self.color = color #顏色屬性
self.seat = seat #座位屬性
#方法(method)
def drive(self):
print(f"My car is {self.color} and {self.seat} seats.")
#object_name = classname()
pass
#toyota = Car() #建立 Car 類別的物件
toyota = Car("blue",4) #建立 Car 類別的物件
#檢查物件導向 isinstance(object_name, class_name)
print(isinstance(toyota, Car)) # 執行結果:True
print(isinstance(toyota, Motorcycle)) # 執行結果:False
toyota.color = "blue" #顏色屬性 給定value
toyota.seat = 4 #座位屬性 給定value
print(toyota.color) # 執行結果:blue
print(toyota.seat) # 執行結果:4
toyota.drive()
```
## python module
[解析Python模組(Module)和套件(Package)的概念](https://www.learncodewithmike.com/2020/01/python-module-and-package.html)
1. 把所有用得到function的py檔放在同一個路徑裡
1. 路徑裡要有**vs**、**vscode**的資料夾
2. run完專案後,會產生**pycache**的資料夾
3. **pycache**資料夾中,可以看到包含了引用模組的已編譯檔案,當下一次執行主程式時,Python編譯器看到已編譯的模組檔案,會直接載入該模組(Module),而省略編譯的動作,藉此來加速載入模組(Module)的速度。
以主程式裡用了兩個模組為例:
主程式: app.py
副程式: post.py、about.py
### about.py
```python=
#取得作者
def get_author():
return "Mike"
#取得電子郵件
def get_email():
return "learncodewithmike@gmail.com"
```
### post.py
```python=
class Post:
# 建構式
def __init__(self):
self.titles = []
# 新增文章
def add_post(self, title):
self.titles.append(title)
# 刪除文章
def delete_post(self, title):
self.titles.remove(title)
pass
```
### app.py
```python=
from post import Post
from about import get_author, get_email
p = Post()
p.add_post("Python Programming")
author = get_author()
email = get_email()
print(p.titles) #執行結果:['Python Programming']
print(author) #執行結果:Mike
print(email) #執行結果:learncodewithmike@gmail.com
```
## python package
新增一個資料夾(blog)把有function 的 py檔放進去
新增的資料夾裡面要有__init__.py (可以是空的)
只要以後要import時就用以下:
```python=
from blog import post
from blog import about
```
但切記之後的寫法就會變成:
```python=
p = post.Post()
p.add_post("myprogram")
author = about.get_author()
email = about.get_email()
```