如何只在csv文件的排序列表中显示int

时间:2014-03-03 09:22:24

标签: python csv sorted

我有一个巨大的CSV文件,我只能显示colume“name”和“runtime” 我的问题是我必须对文件进行排序并打印最前10分钟和前10分钟 行运行时并打印它们 但行'runtime'包含如下文本:

['http://dbpedia.org/ontology/runtime',
 'XMLSchema#double',
 'http://www.w3.org/2001/XMLSchema#double',
'4140.0',
 '5040.0',
 '5700.0',
 '{5940.0|6600.0}',
 'NULL',
 '6480.0',....n]

如何对仅显示数字的列表进行排序

到目前为止我的代码:

import csv

run = []

fp = urllib.urlopen('Film.csv')

reader = csv.DictReader(fp,delimiter=',')

for line in reader:

    if line:
            run.append(line)

name = []

for row in run:

    name.append(row['name'])

    runtime = []

for row in run:

    runtime.append(row['runtime'])

runtime

预期产出:

csv文件包含空值和值,如下所示{5940.0 | 6600.0}

预期产出

 '4140.0',
 '5040.0',
 '5700.0',
 '6600.0',
 '6800.0',....n]

不包含NULL值,只包含查找值中的最高值 像这样 {5940.0 | 6600.0}

3 个答案:

答案 0 :(得分:0)

您可以像这样过滤它,但您应该等待更好的答案。

>>>l=[1,1.3,7,'text']
>>>[i for i in l if type(i) in (type(1),type(1.0))] #only ints and floats allowed
[1,1.3,7]

这应该可以。

答案 1 :(得分:0)

我的工作流程可能是:使用str.isdigit()作为过滤条件,转换为包含BIF int()float()的数字,然后使用sort()sorted()

答案 2 :(得分:0)

虽然可以使用将在此处显示的众多答案之一,但我个人会利用您对csv文件的一些领域知识:

runtime = runtime[3:]

根据runtime行的示例值,前三列包含元数据。所以你知道更多关于输入文件结构的信息,而不仅仅是“它是一个csv文件”。

然后,您需要做的就是排序:

runtime = sorted(runtime)
max_10 = runtime[-10:]
min_10 = runtime[:10]

我在这里使用的语法叫做“slice”,它允许你通过在方括号中指定起始索引和“up-to-but-not-including”索引来访问序列的范围用冒号隔开。干净的技巧:负序索引包装被视为从序列结束开始。