Python中 "==" 和 控制台输入字符串的问题。

问题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。
难道真的就是因为我在控制台输入了一个 回车,
把回车符号也加进去了 ????

2个回答

[quote="findjava"]问题补充:
非常感谢 RednaxelaFX 的回答。
补充:
1.我用的windows XP。
用的是 Eclipse3.2 + Pydev。
输入的'.'和'.'用 "==" 就是不等。[/quote]
哈哈,我就猜是平台问题……
你使用了Pydev,而它的FAQ里就说明了在Pydev的console中使用raw_input可能出现换行符的问题:[url=http://pydev.sourceforge.net/faq.html#why_raw_input_input_does_not_work_correctly]Why raw_input() / input() does not work correctly in pydev?[/url]
所以不是Python 2.6也不是Windows的问题,放心吧。

怪哉……在Windows 7上用Python 2.6执行第一段代码的行为与楼主原本的意图一样,在输入'.'之后就跳出循环并写文件了。没有出错。
[code="python"]Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.

fname = raw_input('Enter filename: ')
Enter filename: data.txt
print '"%s"' % fname
"data.txt"[/code]
楼主是在什么平台上运行的?

如果对raw_input得到的内容不放心的话,用str.strip()来把前后的空白符都去掉,或者用str.rstrip()把字符串尾部的空白符去掉就是了。
[code="python"]>>> ' abcd.txt\r'.rstrip()
' abcd.txt'[/code]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐