Python 如何仅在csv文件的排序列表中显示int
我有一个巨大的CSV文件,我只想显示列“名称”和“运行时” 我的问题是,我必须对文件进行排序,并从 行并打印它们 但行“runtime”包含如下文本:Python 如何仅在csv文件的排序列表中显示int,python,csv,sorted,Python,Csv,Sorted,我有一个巨大的CSV文件,我只想显示列“名称”和“运行时” 我的问题是,我必须对文件进行排序,并从 行并打印它们 但行“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
['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]
不包含空值,并且仅包含查找的值中最高的值
这样地
{5940.0 | 6600.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]
这应该可以做到。我的工作流程可能是:使用
str.isdigit()
作为过滤器,用BIFint()
或float()
转换成一个数字,然后使用sort()
或sorted()
,而您可以使用此处显示的众多答案之一,我个人会利用您的csv文件的一些领域知识:
runtime = runtime[3:]
根据运行时
行的示例值,前三列包含元数据。因此,您对输入文件的结构了解得更多,而不仅仅是“它是一个csv文件”
然后,您需要做的就是排序:
runtime = sorted(runtime)
max_10 = runtime[-10:]
min_10 = runtime[:10]
我在这里使用的语法称为“slice”,它允许您通过在用冒号分隔的方括号中指定开始索引和“最多但不包括”索引来访问序列的一个范围。巧妙的技巧:负索引换行被视为从序列的末尾开始。请识别代码。换句话说,您希望过滤数据以仅包含数字?请编辑您的程序的预期输出。我是新来的,对代码很抱歉!但我想过滤它,使它只包含数字。@msvalkon我想概括地说,是的。[i for i in runtime如果(i)in(type(1),type(1.0))应该做什么?但这似乎有点不和谐。