1. 格式化輸出
1.1 f-string
? ? 在一個字符串的前面加上前綴 f 或 F,然后字符串里面就可以通過 { } 引用python 表達式,例如:
? ? ? ? name = 'Bill'
? ? ? ? age = 25
? ? ? ? f"My name is {name}, {age} years old. "
? ? ? ? { } 中除了變量化,還可以加入一引起表達式用來更精細得控制字符串格式,如:
? ? ? ? pi = 3.1415926
? ? ? ? print(f"the value of pi is {pi:.3f}") # 冒號后面加入對變量pi的一些限制,本例中小數(shù)點后保留三位小數(shù)

? ? ? ? { }中,如果冒號后面跟的是一下整數(shù),限制該處字段的最小字符寬度,達不到設定的字符數(shù)就會用空格補齊,這樣有利于輸出的格式對齊,如下, 每個輸出內(nèi)容的升度雖不一樣,但是會對齊輸出:

1.2 str.format() 來格式化字符串
? ? 像第一種方法一樣,字符串中也用 { } 來占位,然后用str.format() 方法傳入?yún)?shù)以填充到字符串中
? ?“My name is {}, {} years old”.format('Bill' , 25)

? ? 格式化字段 { } 中可以用數(shù)字來引用 str.format() 位置參數(shù),{0} 就代表傳入的第一個參數(shù),這樣的一個好處是可以更改傳入?yún)?shù)的順序,不必一定得按照傳入的順序來填充字符串,如下:

? ? 如果str.format()中的參數(shù)是關鍵字參數(shù),那么格式化字段 { }中就可以通過關鍵字來引用,如下:

????位置參數(shù)和關鍵字參數(shù)可以混合使用,關與位置參數(shù)和關鍵字參數(shù)前的文章中有介紹
1.3 手動格式化字符串
? ? 這種方法需要自己調(diào)用相應的方法來對字符串的格式進行設置,這種方法更精細化,特定化,但是操作起來也更繁瑣,實際中應用的并不多,舉例如下:

1.4 % 操作符格式化字符串
? ? 這個方法來源于c語言,一直被保留下來,使用起來也很簡單方便,字符串中, % 用來占位同時指定該字段的類型和格式,然后在字符串外傳入實例,例如,%6.3f 中 6是該字段長度,不足的話用空格補齊,.3f指小數(shù)點后三位:

2. 文件的讀寫
2.1 打開文件: open(filename, mode) , 該方法返回一個文件對象用于操作
????mode 有以下幾種:
????????r:只讀, w: 只寫, r+: 讀寫
????????a: 將數(shù)據(jù)寫入到文件末尾(如果文件中已有內(nèi)容)而w的寫入會覆蓋文件的原內(nèi)容
????????通常文件打開會以文本的格式打開,如果在mode中指定b,如rb, 就代表以二進制的格式打開
?????????????open('test.txt', 'rb')
? ? 直接用open()方法打開文件后,相應的要進行關閉操作,如 f = open('text.txt'), 最后要調(diào)用 f.close()來關閉文件。文檔更推薦用with 關鍵字來進行打開文件操作,就不用再額外進行關閉:
? ? ? ? with open('test.txt') as f:
? ? ? ? ? ? ? ? f.read()
2.2 文件對象的操作方法(假設 f 是一個已經(jīng)打開的文件對象)
? ?(1) f.read(size) ????#讀取指定size的文件內(nèi)容,f.read()默認讀取全部內(nèi)容,有可能引起內(nèi)存不足,讀取到末尾返回空字符串
? ? (2)f.readline() ????#讀取文件的每一行內(nèi)容,讀取到末尾返回空字符串
? ? (3)f.readlines()? ? #讀取文件的所有行
? ? (4)f.write(string)? ? #將字符串的內(nèi)容寫入到文件
? ? (5)f.tell()? ? ? ? ? ? ? ? #返回一個數(shù)字,代表該文件對象當前所在的位置(相對于二進制模式下文件的? ? ? 開始位置),如果是文本模式,返回一個模糊的數(shù)字
? ? (6)f.seek(offset, from_what)? ? ?
????#改變文件對象所在位置,offset 是相對的偏移量,from_what 有三個選擇,0 代表從文件開始位置,1代表從當前位置,2代表從文件末尾。如f.seek(5,0)代表文件對象的位置移動到文件的第6個字節(jié),這些都是在二進制模式下的操作
? ? # 若是在文本模式下,f.seek()只允許從文本的開始位置進行偏移,或者f.seek(0,2)移動到文本的末尾,offset 的值只能是f.tell() 能夠返回的值或者是0
3. 保存結(jié)構(gòu)化數(shù)據(jù)到json文件
? ? python中有專門的json 模塊來進行結(jié)構(gòu)化數(shù)據(jù)的存儲,彌補了open()方法只能讀寫文本數(shù)據(jù)的不足。
? ? import json
? ? json.dumps(data) ????#? ? 把結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為字符串,這個過程叫序列化
? ? json.dump(data, f)? ? #? ? 把結(jié)構(gòu)化的數(shù)據(jù) 序列化之后寫入文件,f 是一個文件對象
? ? json.load(f)? ? ? ? ? ? ? ? #? ?把文件中文本轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù),這個過程叫去序列化,f 是一個文件對象
? ??