#!/usr/bin/env python
#makeTextFile.py ---- create text file
import os
ls = os.linesep
#get filename
while True:
fname = raw_input('Enter filename:')
if os.path.exists(fname):
print "ERROR:'%s'already exists" % fname
else:
break
#get file content (text) lines
all = []
print "\nEnter lines ('.'by itself to quit).\n"
#loop until user terminates input
while True:
entry = raw_input('>')
if entry == '.':
break
else:
all.append(entry)
#write lines to file with proper line-ending
fobj = open(fname,'w')
fobj.writelines(['%s%s' % (x, ls) for x in all])
fobj.close()
print 'Done!'
break 指示跳出while循环语句。
解析:fobj.writelines(['%s%s' % (x, ls) for x in all])
当输入内容保存在内存中,需要将其保存到文件。 打开文件准备进行写操作。
将内存中得到内容逐行写入文件。每个文件都需要一个行结束符(或者文件结束符)。代码结构称为列表解析。它完成:
对我们文件的每一行,根据程序运行平台添加一个合适的行结束符。'%s%s'为每行添加行结束符,(x, ls)表示每一行及其行结束符,对Unix平台是'\n', 对DOS或win32平台式'\r\n'。通通过使用os.lineseq,我们不关心程序运行在什么平台,也不必涛根据不同的平台决定使用哪种行结束符。文件对象的writelines()方法接收包含行结束符的结果列表,并将它写入文件。
#!/usr/bin/env Python
#ReadTextFile.py ---- read and display text file
#get filename
fname = raw_input("Enter filename:")
print
#attempt to open file for reading
try:
fobj = open(fname, 'r')
except IOError, e:
print '*** file open error:', e
else:
#display contents to the screen
for eachLine in fobj:
print eachLine,
fobj.close()
try-except-else语句:
try子句是一段我们希望检测错误的代码块。即我们的动作;
except子句是我们处理错误的地方,检查try的动作,--通常是IOERROR类型的错误。
else子句在try代码块运行无误时执行。
由于我们没有移除代表每行结束的行结束符,我们不得不抵制print语句自动生成的行结束符--通过在print语句的最后加一个逗号可以达到这一目的。(不处理的话既有两个行结束符--即回车换行2次)