python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化
1、上節(jié)課代碼中的問題 第四課中介紹了python持久化的基礎(chǔ)實(shí)例——將數(shù)據(jù)寫入文本文件。 可當(dāng)我們試著把保存數(shù)據(jù)的文件讀取出來會(huì)怎樣呢? try: with open('man.txt', 'r') as fman: print(fman.readline())except IOError as err: print(str(err)) 執(zhí)行時(shí),
1、上節(jié)課代碼中的問題
第四課中介紹了python持久化的基礎(chǔ)實(shí)例——將數(shù)據(jù)寫入文本文件。
可當(dāng)我們試著把保存數(shù)據(jù)的文件讀取出來會(huì)怎樣呢?
try:
with open('man.txt', 'r') as fman:
print(fman.readline())
except IOError as err:
print(str(err))
執(zhí)行時(shí),返回一大...串兒字符串。里邊包含了man.txt文件中的所有數(shù)據(jù)。
這種未被格式化的存儲(chǔ)方式基本上是沒什么用的!除非你把整個(gè)文件當(dāng)一個(gè)字符串讀出來,然后再去想各種辦法解析...
2、把即將寫入文本文件的數(shù)據(jù)格式化:
當(dāng)然我們可以寫出新的代碼來實(shí)現(xiàn)數(shù)據(jù)格式化。
可第二課中我們曾經(jīng)創(chuàng)建過一個(gè)nester模塊,里邊的print_lol函數(shù)就是用來格式化列表的。為什么不把它改造一個(gè)直接拿來使用呢?不要重復(fù)造輪子嘛...OOP吧!
改造print_lol函數(shù)(原代碼在第二課中):
'''''模塊名:nester
其中包含一個(gè)函數(shù):print_lol 用于輸出一個(gè)可能嵌套有其他列表的列表'''
def print_lol(the_list, level=0, d='\t', indent=False, file_name=sys.stdout):
'''''函數(shù)print_lol, 使用遞歸的方式輸出一個(gè)可能嵌套有其他列表的列表
參數(shù)the_list, 是需要輸出的列表
參數(shù)level, 是整形,表示縮進(jìn)級(jí)別,默認(rèn)值為0
參數(shù)d, 是字符串,表示縮進(jìn)符號(hào),默認(rèn)值為制表符
參數(shù)indent, 是一個(gè)布爾值,表示是否進(jìn)行縮進(jìn),默認(rèn)為否
參數(shù)file_name, 為需要寫入的文件名,默認(rèn)為不寫入任何文件直接輸出'''
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函數(shù)來取代print() 這個(gè)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函數(shù)
nester.print_lol(other, file_name = other_file)
except IOError as ioerr:
print('File Error: ' + str(ioerr))
如此便可以利用現(xiàn)有的print_lol函數(shù),實(shí)現(xiàn)把格式化后的列表寫入文本文件。
總結(jié)
以上是生活随笔為你收集整理的python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果php环境,苹果电脑安装PHP环境步
- 下一篇: tengine简单安装_树莓派使用宝塔面