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])
这是如何运作的?
答案 0 :(得分:1)
split
将使用空格或您传递的任何字符作为参数将单个字符串拆分为多个列表。通过[1]
使用第二个结果字符串,因为索引从0开始。
float
会忽略前导空格,因此,如果您在:
上拆分并留下一些空格,则无关紧要。
答案 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']
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]
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命令的参数。