標準輸入 - 鍵盤
默認的標準輸入是鍵盤,Python 內置函數 input() 函數可以從標準輸入讀入一行文本。
str = input("請輸入你的名字:")
print("你的名字:" ,str)
輸出結果:
請輸入你的名字:star
你的名字: star
文件操作
open() 函數
語法: File object = open(file_name [,access_mode] [,buffering])
參數說明:
- file_name: 是一個包含要訪問的文件名稱的字符串值。
- access_mode : 決定了打開文件的模式。
- buffering :如果buffering的值被設爲0,就不會有寄存。如果buffering的值取1,訪問文件時會寄存行。如果將buffering的值設爲大於1的整數,表明了這就是的寄存區的緩衝大小。如果取負值,寄存區的緩衝大小則爲系統默認。
File 對象
一個文件被打開後,得到一個 File 對象。可以獲取該文件的各種信息。
file 屬性
- file.closed: 文件已被關閉,返回 true
- file.mode : 返回被打開文件訪問模式
- file.name : 返回文件的名稱
- file.softspace: 如果用 print() 輸出後,必須跟一個空格符,則放回 false,否則返回 true
file = open("d:\\a.jpg","wb")
print("file.name = ",file.name)
print("file.closed = ", file.closed)
print("file.mode = ",file.mode)
輸出結果:
file.name = d:\a.jpg
file.closed = False
file.mode = wb
file 函數
- file.close():關閉文件,釋放資源,關閉文件不能再進行讀寫操作。
- file.flush():刷新文件內部緩衝,直接把內部緩衝區數據立即寫入到文件。
- file.filenno():返回一個整型文件描述符。
- file.isatty():如果文件連接到一個終端設備就返回 True,否則返回 False。
- file.next():返回文件下一行。
- file.read([size]):從文件讀取指定字節數,如果未給定或爲負數,則讀取所有。
- file.readline([size]):讀取正整行,包括 “\n” 字符。
- file.readlines([sizeint]):讀取所有行並返回列表,若給定 sizeint>0 ,則是設置一次讀取多少字節,這是爲了減輕讀取壓力。
- file.seek(offset[,whence]): 設置文件當前位置。
- file.tell():返回文件當前位置。
- file.truncate([size]):截取文件,截取的字節通過 size 指定,默認爲當前文件位置。
- file.write(str):將字符串寫入文件,沒有返回值。
- file.writelines(sequence):向文件寫入一個序列字符串列表,如果需要換行則要自己假如每行的換行符。
file_obj = open('D:/read.txt','r+')
try:
all_content = file_obj.read()
print("file open success")
print("all_content = ", all_content)
print("")
except:
print("file open failed")
finally:
file_obj.close()
輸出結果:
file open success
all_content = Python 深入淺出
1.HelloWorld
2.函數
3.高階函數
4.面向對象
file_write = open("D:/write.txt","w")
file_write.write("www.baidu.com")
file_write.close()
輸出結果:
OS 文件/目錄方法
- os.access(path,mode):檢驗權限模式。
- os.chdir(path):改變當工作目錄。
- os.chflags(path,flags):設置路徑的標記爲數字標記。
- os.chmod(path,mode):更改權限。
- os.chown(path,uid,gid):更改文件所有者。
- os.chroot(path):改變當前進程的跟目錄。
- os.close(fd):關閉文件描述符 fd。
- os.closerange(fd_low,fd_high) 關閉所有文件描述符
- os.dup(fd) 複製文件描述符 fd
import os
print("os.name = ",os.name)
print("os.environ = ",os.environ) #環境變量
輸出結果:
os.name = nt
os.environ = environ({‘ALLUSERSPROFILE’: ‘C:\ProgramData’, ‘APPDATA’: ‘C:\Users\Administrator\AppData\Roaming’, ‘COMMONPROGRAMFILES’: ‘C:\Program Files\Common Files’, ‘COMPUTERNAME’: ‘hy-201710072001’, ‘COMSPEC’: ‘C:\Windows\system32\cmd.exe’, ‘DEVMGR_SHOW_DETAILS’: ‘1’, ‘FP_NO_HOST_CHECK’: ‘NO’, ‘HOMEDRIVE’: ‘C:’, ‘HOMEPATH’: ‘\Users\Administrator’, ‘JAVA_HOME’: ‘C:\Program Files\Java\jdk1.8.0_144’, ‘LOCALAPPDATA’: ‘C:\Users\Administrator\AppData\Local’, ‘LOGONSERVER’: ‘\\hy-201710072001’, ‘NUMBER_OF_PROCESSORS’: ‘4’, ‘OS’: ‘Windows_NT’, ‘PATH’: ‘C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_144\bin;C:\Program Files\Git\cmd;C:\Users\Administrator\AppData\Local\Android\sdk\platform-tools;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\;C:\Users\Administrator\AppData\Local\Programs\Fiddler;E:\Python\venv\Scripts’, ‘PATHEXT’: ‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC’, ‘PROCESSOR_ARCHITECTURE’: ‘x86’, ‘PROCESSOR_IDENTIFIER’: ‘x86 Family 6 Model 37 Stepping 2, GenuineIntel’, ‘PROCESSOR_LEVEL’: ‘6’, ‘PROCESSOR_REVISION’: ‘2502’, ‘PROGRAMDATA’: ‘C:\ProgramData’, ‘PROGRAMFILES’: ‘C:\Program Files’, ‘PROMPT’: ‘(venv)
StringIO
StringIO 在內存中 讀寫 str. getvalue() 方法用於獲得寫入後的str.
from io import StringIO
f = StringIO()
f.write("Hello,Python")
print(f.getvalue())
StringIO 想內存中寫入字符串,再通過 getvalue() 獲取。
輸出結果:
Hello,Python
序列化
序列化:把變量從內存中變成可以存儲或傳輸的過程。在其他語言中稱之爲 serialization,marshalling,在 Python 中稱之爲 pickling。
反序列化:把變量內容從序列化的對象重新讀到內存裏,稱 unpickling。
import pickle
file_tom = open("D:/tom.txt","wb")
d = dict(name="tom",age=20,score=90)
byte_buffer = pickle.dump(d,file_tom)
pickle.dump 將 dict 對象序列化爲 bytes,然後寫入到文件中。
JSON
JSON 函數
使用 JSON 函數需要導入 JSON 庫:import json
函數 | 描述 |
---|---|
json.dumps() | 將 Python 對象轉換成 JSON 字符串 |
json.loads() | 將 JSON 字符串轉換成 Python 對象 |
內置對象與 JSON 轉換
import json
tomcat = dict(name='tomcat',age= 22,score =90)
json_str = json.dumps(tomcat) # 對象轉換成 json 字符串
print(json_str)
tomcat_obj = json.loads(json_str) # json 字符串轉換成對象
print("tomcat_obj type = ",type(tomcat_obj))
print("tomcat_obj = ",tomcat_obj)
輸出結果:
{“name”: “tomcat”, “age”: 22, “score”: 90}
tomcat_obj type = <class ‘dict’>
tomcat_obj = {‘name’: ‘tomcat’, ‘age’: 22, ‘score’: 90}
普通 class 對象轉換成 JSON
普通 class 對象如果沒有做處理,將會轉換失敗。
TypeError: Object of type ‘Student’ is not JSON serializable
解決辦法: dumps(obj,default) 可選參數 default 就是把任意一個對象轉換成一個可序列爲 JSON 的對象。
class Student(object):
def __init__(self,name,age):
self.name = name
self.age = age
def stu2dict(stu):
return {
'name':stu.name,
'age':stu.age
}
stu = Student("mike",22)
print(json.dumps(stu,default=stu2dict))
輸出結果:
{“name”: “mike”, “age”: 22}
JSON 轉換成對象
class Student(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "name = %s, age = %d" % (self.name,self.age)
def dict2stu(d):
return Student(d['name'],d['age'])
json_stu = '{"name":"luse","age":15}'
s_obj = json.loads(json_stu,object_hook=dict2stu) # JSON 轉換成對象
print(type(s_obj))
print(s_obj)
輸出結果:
<class ‘main.Student’>
name = luse, age = 15