2015-03-30 46 views
0

对于作业我创建了一段代码。 目标是打开文件并从发件人中找到电子邮件地址。阅读与在Python中打开

#open file 
fname = raw_input("Enter file name: ") 
if len(fname) < 1 : fname = "mbox-short.txt" 

fh = open(fname) 


#look for the appropriate lines and add the in a list 
names = [] 
for line in fh: 
    line = line.rstrip() 
    if line.startswith("From:"): 
     words = line.split() 
     names.append(words[1]) 

我的问题是:为什么

fname = raw_input("Enter file name: ") 
if len(fname) < 1 : fname = "mbox-short.txt" 

fh = open(fname) 


#look for the appropriate lines and add the in a list 
names = [] 
for line in fh: 
line = line.rstrip() 
    if line.startswith("From:"): 
     words = line.split() 
     names.append(words[1]) 

工作,但

fname = raw_input("Enter file name: ") 
if len(fname) < 1 : fname = "mbox-short.txt" 

fh = open(fname) 
text = read.fh() 


#look for the appropriate lines and add the in a list 
names = [] 
for line in text: 
line = line.rstrip() 
    if line.startswith("From:"): 
     words = line.split() 
     names.append(words[1]) 

不会呢?

我很难理解为什么我只能使用open和not read。

感谢

+0

'text = read.fh()'是错误的。使用'fh.read()' – adarsh 2015-03-30 19:25:25

+2

它不工作,因为'read.fh'是完全荒谬的。它也行不通,因为你不再遍历行,而是遍历单个字符。最重要的是,“不起作用”对于SO来说不是一个可接受的错误描述。在与本网站进行任何进一步互动之前,请重新参观并浏览帮助中心。 – l4mpi 2015-03-30 19:32:58

回答

0

首先,你需要,因为read尚未定义,fh是你想从中读取数据的文件对象与fh.read()更换,read.fh()

二,问题是fh.read()返回一个字符串,而不是一行行。因此,当你迭代时,你是通过字符来完成的。这不是你想要的。

如果你想使用fh.read(),那么你必须按行分割text。因此,在for循环中使用text.split('\n'),而不是文本。

+0

更有问题的事情是完全搞砸了尝试在调用'读'... – l4mpi 2015-03-30 19:31:32

+0

@ l4mpi,你是对的。我已经扩大了我的答案来解决这个问题。 – 2015-03-30 19:36:38

+0

谢谢澄清。我设法解决它,但我想知道为什么读取不起作用。理解为什么某些东西不起作用在我的学习过程中同样重要。非常感谢你。 – glnvdl 2015-03-31 08:50:50