我有一个巨大的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}
答案 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”索引来访问序列的范围用冒号隔开。干净的技巧:负序索引包装被视为从序列结束开始。