2016-09-16 84 views
0

我想读取一个csv文件,并解析数据,并返回行(start_date)只有当日期是在2010年9月6日之前。然后从行中打印相应的值(单词)按升序排列。我可以使用下面的完成上半年:如何打印csv行的升序Python

import csv 

with open('sample_data.csv', 'rb') as f: 

read = csv.reader(f, delimiter =',') 

for row in read: 

    if row[13] <= '1283774400': 
     print(row[13]+"\t \t"+row[16]) 

它返回正确的起始日期范围,以及相应的字列的值,但它们不是按升序如果做得正确这将显示一条消息返回。我已经尝试使用sort()和sorted()函数,创建一个空列表来填充然后将其附加到行后,但我只是不知道在哪里或如何将它纳入现有的代码,并且非常不成功。任何帮助将不胜感激。

+0

你想如何排序它,我的意思是你想为字列值的排序数据? – LearningNinja

+0

如果行中的日期小于或等于2010年9月6日,我想从start_date列中返回数据。然后从满足条件的words列中返回数据。我可以从列中返回正确的行,但无法按升序打印数据。我正在尝试使用sort()或sorted()来打印升序,但它不打印正确的行或列。 – Adam

回答

0

只是根据< date标准,根据第13行作为整数读取列表,过滤列表,并对其进行排序

注意,常见的错误是过滤为ASCII(可能出现工作),但是需要整数转换来避免排序问题。

import csv 

with open('sample_data.csv', 'r') as f: 
    read = csv.reader(f, delimiter =',') 
    # csv has a title, we have to skip it (comment if no title) 
    title_row = next(read) 
    # read csv and filter out to keep only earlier rows 
    lines = filter(lambda row : int(row[13]) < 1283774400,read) 

# sort the filtered list according to the 13th row, as numerical 
slist = sorted(lines,key=lambda row : int(row[13])) 

# print the result, including title line 
for row in title_row+slist: 
    #print(row[13]+"\t \t"+row[16]) 
    print(row) 
+0

运行此脚本时出现错误消息。 ValueError:int()与基数10无效的文字:'start_date'。实际的excel文件使用'start_date'作为其 – Adam

+0

这个列的id,这就是我的评论线的一点:skip title就像这样:'title_row = next(read)'。编辑过我的帖子,所以标题行被考虑在内。 –

+0

谢谢。我添加了跳过标题的代码,但是我收到另一个错误:Traceback(最近一次调用最后一个): 文件“”,第2行,在 print(row [13] +“\ t \ t”+行[16]) IndexError:字符串索引超出范围(我不确定这是否是缩进问题或什么,我相信我缩进正确,使用IDLE 2.7.10 – Adam