问题1:
我用的是Python2.6
有这个一个程序,
输入文件名,
先是检查文件名,
文件名不存在,则对文件输入内容。
我指定输入'.'的时候停止输入,
但是程序运行过程中,即使输入了'.'循环也不会break掉。
为什么?
代码如下:
[code="python"]
import os
ls = os.linesep
fname = raw_input('Enter a file name : ')
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('>')
print type(entry)
if entry == '.' : #如果输入的字符 == '.' break。但没有实现。
break
else : all.append(entry)
fobj = open(fname, 'w')
fobj.writelines(['%s%s' %(x, ls) for x in all])
fobj.close()
print 'DONE!'
[/code]
问题2:
在准备读文件内容的时候,
好像输入的文件名有点误会。
在异常信息中,我们看到:
Enter filename : data.txt
*** file open error : [Errno 22] invalid mode ('r') or filename: '[color=red]data.txt\r[/color]'
这个文件名后面加了 \r 。难道是因为我在控制台输入完文件名后按了 回车 的原因??
代码如下:
[code="python"]
fname = raw_input('Enter filename : ')
print
try :
fobj = open(fname, 'r')
except IOError, e:
print "*** file open error : ", e #这里输出异常,异常信息里filename : data.txt\r
else :
for eachLine in fobj:
print eachLine,
fobj.close()
[/code]
谢谢大家!
[b]问题补充:[/b]
非常感谢 RednaxelaFX 的回答。
补充:
1.我用的windows XP。
用的是 Eclipse3.2 + Pydev。
输入的'.'和'.'用 "==" 就是不等。
2.用str.strip()确实可以得到我想要的filename,
但现在我想知道的是,为什么filename会变成data.txt\r。
难道真的就是因为我在控制台输入了一个 回车,
把回车符号也加进去了 ????