读取

时间:2015-04-28 20:07:22

标签: python file

我有一个家庭作业,我们需要浏览一个我们创建的文件,并选择玩过超过50场比赛并且平均投篮命中率超过50%的球员(我们必须通过除以这两个数字来计算) )。

我已经像这样格式化了我的代码,因为我试图索引我从文本创建的新行。这对我不起作用,我想知道是否有人能指出我的新方向。谢谢。

f = open("stats-clean.txt", "r")
lines = f.read()
for line in lines:
    new_lines = lines.split("\n")
report = []
new_lines.remove(new_lines[0])
for item in new_lines:
    if int(item[4])/int(item[5]) > .50 and int(item[3]) >= 50:
        report.append(item)
print(report)
f.close()

3 个答案:

答案 0 :(得分:1)

我不确定输入的格式,但有一个问题是你试图将整数与浮点数进行比较。如果您将项目[4]和项目[5]分类为内注,例如

int(item[4])/int(item[5]) > .50

那么上面分区的解析总会给你一个int。所以......

int(4)/int(5) = 0

但是,

float(4)/float(5) = 0.8

因此,您可能没有真正进行所需的比较,这可能导致if语句的该部分解析为false。

答案 1 :(得分:1)

只是为了让您知道,有一种更简单的方法可以做到这一点,我只是编写了这个解决方案以获得乐趣。

var myVar_1 = "things";
var myVar_2 = "things";
var myVar_3 = "things";
var myVar_4 = "things";
var myVar_5 = "things";

答案 2 :(得分:0)

这里的一个关键问题是new_lines是一个字符串列表,例如

>>> new_lines[0]
'Julyan Stone,PG,DEN,4,0.5,0.5'
此字符串的

item[4]是字符'a',因此当您使用int进行投射时,您会获得ValueError: invalid literal for int() with base 10: 'a'

您需要使用split(',')拆分new_lines的每个元素。例如,

>>> new_lines[1].split(',')
['Chris Wilcox', 'PF', 'BOS', '61', '1.8', '2.5']

现在您可以item[4] '1.8'进行投射并执行条件测试,但使用floats代替int将字符串转换为数字,如下所示: @ GC123UNC

还要注意循环

for line in lines:
    new_lines = lines.split("\n")

是多余的:lines是一个字符串:一个split('\n')为您提供所需的列表new_lines。您需要遍历new_lines的元素并在,上拆分,以便您可以进行条件测试。

而不是remove使用切片:newlines[1:]

您可能希望考虑使用lines = f.readlines()而不是lines = f.read()。后者返回一个您需要拆分然后再拆分的字符串。前者为您提供了一个列表,您可以strip()并将其拆分为,(类似line.strip().split(',')