ndsc_avaj 2009-03-13 14:56
浏览 351
已采纳

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条回答 默认 最新

  • rednaxelafx 2009-03-13 15:54
    关注

    [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的问题,放心吧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料