python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化
1、上節課代碼中的問題 第四課中介紹了python持久化的基礎實例——將數據寫入文本文件。 可當我們試著把保存數據的文件讀取出來會怎樣呢? try: with open('man.txt', 'r') as fman: print(fman.readline())except IOError as err: print(str(err)) 執行時,
1、上節課代碼中的問題
第四課中介紹了python持久化的基礎實例——將數據寫入文本文件。
可當我們試著把保存數據的文件讀取出來會怎樣呢?
try:
with open('man.txt', 'r') as fman:
print(fman.readline())
except IOError as err:
print(str(err))
執行時,返回一大...串兒字符串。里邊包含了man.txt文件中的所有數據。
這種未被格式化的存儲方式基本上是沒什么用的!除非你把整個文件當一個字符串讀出來,然后再去想各種辦法解析...
2、把即將寫入文本文件的數據格式化:
當然我們可以寫出新的代碼來實現數據格式化。
可第二課中我們曾經創建過一個nester模塊,里邊的print_lol函數就是用來格式化列表的。為什么不把它改造一個直接拿來使用呢?不要重復造輪子嘛...OOP吧!
改造print_lol函數(原代碼在第二課中):
'''''模塊名:nester
其中包含一個函數:print_lol 用于輸出一個可能嵌套有其他列表的列表'''
def print_lol(the_list, level=0, d='\t', indent=False, file_name=sys.stdout):
'''''函數print_lol, 使用遞歸的方式輸出一個可能嵌套有其他列表的列表
參數the_list, 是需要輸出的列表
參數level, 是整形,表示縮進級別,默認值為0
參數d, 是字符串,表示縮進符號,默認值為制表符
參數indent, 是一個布爾值,表示是否進行縮進,默認為否
參數file_name, 為需要寫入的文件名,默認為不寫入任何文件直接輸出'''
for each_item in the_list:
if isinstance(each_item, list):
print_lol(each_item, level+1, file_name)
else:
if indent:
for tab_stop in range(level):
print(d, end = '', file = file_name)
print(each_item, file = file_name)
改造寫入文件的代碼塊(原代碼在第四課中):
'''使用新的print_lol函數來取代print() 這個BIF'''
import nester
man = []
other = []
try:
data = open('sketch.txt')
try:
for each_line in data:
(role, line_spoken) = each_line.split(':', 1)
line_spoken = line_spoken.strip()
if role == 'man':
man.append(line_spoken)
else:
other.append(line_spoken)
except ValueError:
pass
data.close()
except IOError as ioerr:
print('File Error :' + str(ioerr))
try:
with open('man_data.txt', 'w') as man_file, open('other_data.txt', 'w') as other_file:
nester.print_lol(man, file_name = man_file) #把此處的print BIF改為帶有格式化列表和寫入文件功能的pring_lol函數
nester.print_lol(other, file_name = other_file)
except IOError as ioerr:
print('File Error: ' + str(ioerr))
如此便可以利用現有的print_lol函數,實現把格式化后的列表寫入文本文件。
總結
以上是生活随笔為你收集整理的python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果php环境,苹果电脑安装PHP环境步
- 下一篇: tengine简单安装_树莓派使用宝塔面