书里的一个例子

书里的一个例子

小弟学PY不深.调书本这个例子却不明白也调不通哦.多谢指教


import os
ls = os.linesep

while True:

    if os.path.exists(fname):
        print "error: '%s already exists" % fname
    else:
        break

all = []
print "\nEnter lines('.'by itself to quit).\n"

while True:
    entry = raw_input('>')
    if entry == '.':
        break
    else:
        all.append(entry)

fobj = open(fname,'w')z
fobj.writelines(['%s%s' %(x,ls)for x in all])
fobj.close()
print 'done'
出现了什么问题?
fobj = open(fname,'w')z



最后那个Z是干嘛的
open(fname,'w')z
应该是这里的错,书里面也有错的。
呵呵.最后那个z笔误.

书里if os.path.exists(fname):这句前,打少了一句 fname = raw_input('enter a file name')

不过还是多谢各位咯.
哎。教科书都有问题,这不是误人子弟吗
这个例子是《python核心编程第二版》中的创建文件的例子,我加了一点读文件的代码
#!/usr/bin/env python
#coding=utf-8
#filename=makefile.py

import os #导入OS模块
ls = os.linesep #linesep用来添加行结束符(win32为'\r\n',linux为'\n',mac为'\r')

while True:
    fname = raw_input('enter a file name:') #输入文件名
    if os.path.exists(fname):
        print "error: '%s already exists" % fname #检查文件名是否已经存在
    else:
        break #如果没有相同的文件名,跳出循环

all = [] #建立空列表,准备装载文件内容
print "\nEnter lines('.'by itself to quit).\n" #提示输入'.'为退出输入

while True:
    entry = raw_input('>')
    if entry == '.': #判断输入的是否为'.'
        break
    else:
        all.append(entry) #使用append方法将输入的内容装到all中

fobj = open(fname,'w') #准备写文件
fobj.writelines(['%s%s' %(x,ls)for x in all]) #写入文件,并在行尾加上行结束符

fobj = open(fname,'r') #准备读文件
for f in fobj: #使用for循环来读取文件内容
    print f,
    
#d = fobj.readlines() #另外一种读出文件内容的方法,可以看出行结束符
#print d

fobj.close() #关闭文件

print 'done'


虽然是书上,但是还是感觉这种创建方式有点别扭,为什么要空列表追加内容的方式。。。。直接一段一段写进去完了么,难道是为了方便在python命令行里面输入?可能是我学得还不深的原因
因为他这个是每次记录一行,分很多次输入的,所以只能是往空列表里逐个添加