任何人都可以帮我解释一下这个python代码吗?

时间:2016-01-09 05:38:26

标签: python

  

7.2编写一个提示输入文件名的程序,然后打开该文件并读取该文件,查找该表格的行:

  X-DSPAM-Confidence:    0.8475
     

计算这些线并从每条线中提取浮点值并计算这些值的平均值并产生输出,如下所示。

     

您可以在下面测试时在http://www.pythonlearn.com/code/mbox-short.txt下载示例数据,输入mbox-short.txt作为文件名。

这就是我所做的并得到了输出,但这是正确的方法吗?:

fname = raw_input("Enter file name: ")
fh = open(fname)
sum = 0
count = 0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
    line = line.replace("X-DSPAM-Confidence:","")
    line = line.strip()
    sum = sum + float(line)
    count = count + 1

avg = sum/count

print "Average spam confidence:",float(avg)

但是,在其他几个方面,这个和GitHub的代码编写方式不同。任何人都可以向我解释一下吗?

1)

fname = raw_input("Enter file name: ")
fh = open(fname)
tot = 0.0
count = 0
for line in fh:
    if not line.startswith("X-DSPAM-Confidence:") : continue
    words = line.split()
    tot = tot + float(words[1])
    count = count + 1
print "Average spam confidence:", tot/count

split()在这做什么?删除空格并将其打印在下一行右边?那有什么帮助呢?那么float(words[1])会是什么?对不起,这听起来很傻,但这是我进入Python的第三天,我只是想学习。

2)很多人用这种方式使用了总和:

 a = line.split(':')
     sum = sum + float(a[1])

这是如何运作的?

3 个答案:

答案 0 :(得分:1)

split将使用空格或您传递的任何字符作为参数将单个字符串拆分为多个列表。通过[1]使用第二个结果字符串,因为索引从0开始。

float会忽略前导空格,因此,如果您在:上拆分并留下一些空格,则无关紧要。

答案 1 :(得分:1)

  1. str.split()将字符串拆分为列表。查看文档中的示例以获取更多详细信息。顺便说一下:

    >>> '1 2 3 4'.split()
    ['1', '2', '3', '4']
    
    >>> '1:2:3:4'.split()
    ['1:2:3:4']
    
    >>> '1:2:3:4'.split(':')
    ['1', '2', '3', '4']
    
    
    >>> 'X-DSPAM-Confidence:    0.8475'.split()
    ['X-DSPAM-Confidence:', '0.8475']
    
    >>> 'X-DSPAM-Confidence:    0.8475'.split(':')
    ['X-DSPAM-Confidence', '    0.8475']
    
  2. 在这种情况下,
  3. a[1]是列表索引。如上例所示:

    >>> a = 'X-DSPAM-Confidence:    0.8475'.split(':')
    >>> a[0]
    'X-DSPAM-Confidence'
    >>> a[1]
    '    0.8475'
    

    它' S:

    ['X-DSPAM-Confidence', '    0.8475']
           ^^^^                ^^^^
       a[0]                a[1]
    
  4. float(x):返回由数字或字符串x构成的浮点数。

    这很容易理解:

    >>> float('0.8475')
    0.8475
    
    >>> a = 'X-DSPAM-Confidence:    0.8475'.split(':')      
    >>> float(a[1]) + 0.5
    1.3475
    
    >>> a[1] + 0.5
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: Can't convert 'float' object to str implicitly
    

    如果你不进行转换,当你在字符串对象和浮动对象之间运行Type时,Python会引发+,如上例所示。

    然而,float()忽略了空格。所以:

    >>> float('         0.8475   ')
    0.8475
    

答案 2 :(得分:0)

在您的文件输入中,PostMethod post = new PostMethod(instanceURL + "/services/data/v34.0/sobjects/Note/delete/"+listofIds); post.setRequestHeader("Authorization", "OAuth " + authToken); HttpClient httpClient = ProxyAuth.getLocalProxy(); int statusCode = httpClient.executeMethod(post); 始终显示为 - "X-DSPAM-Confidence"。因此,有XDSPAM-Confidence: 0.6959分隔所需行的空间:

line.split()

因为默认情况下space是split命令的参数。