案例:創建文件
(1)編寫一個程序文件,要求用戶名輸入文件名
(2)如果文件已存在,要求用戶重新輸入
(3)提示用戶輸入數據,每行數據先寫到列表中
(4)將列表數據寫入到用戶輸入的文件名中
1.發呆。思考程序的運作方式。交互?非交互?如果是交互的,程序有什麼輸出,要求用戶有什麼輸入。
# python mkfile.py
filename: /etc/hosts
文件已存在,請重試
filename: /etc
文件已存在,請重試
filename: /tmp/myfile.txt
請輸入內容,在單獨的一行上輸入end結束
(end to quit)> hello world!
(end to quit)> ni hao!
(end to quit)> how are you?
(end to quit)> end
# cat /tmp/myfile.txt
hello world!
ni hao!
how are you?
2. 思考程序有哪些功能,將功能編寫成函數,這樣將大的、複雜的問題簡爲一個個的小的問題
def get_fname():
'返回文件名'
def get_content():
'返回內容'
def wfile(fname, content):
'將內容content寫入文件fname
3.書寫主程序代碼,按順序調用函數
def get_fname():
'返回文件名'
def get_content():
'返回內容'
def wfile(fname, content):
'將內容content寫入文件fname'
if __name__ == '__main__':
fname = get_fname()
content = get_content()
wfile(fname, content)
4.填寫每個具體的函數主體代碼
import os
def get_fname():
'返回文件名'
while 1:
fname = get_fname('filename:')
if not os.path.exists(fname):
break
print('文件已存在,請重試!')
return fname
def get_content():
'返回內容'
content = []
print('請輸入內容,在單獨的一行上輸入end結束')
while 1:
line = input('end to quit:')
if line == 'end':
break
content.append(line)
return get_content()
def wfile(fname, content):
'將內容content寫入文件fname'
with open(fname, 'w') as fobj:
fobj.writelines(content)
if __name__ == '__main__':
fname = get_fname()
content = get_content()
content = ['%s\n' % line for line in content]
wfile(fname, content)