2015-09-02 41 views
1

我对脚本很陌生。目前我正在开发一个脚本来读取来自不同文件的数据,然后合并,分类和提取特定数据。在python中排序csv文件需要帮助

现在我被困在使用我的数据的第4列对csv文件进行排序。下面是我使用

*

ifile = open('one.csv', 'r') 
reader = csv.reader(ifile, delimiter=',') 
sortedlist = sorted(reader, key=operator.itemgetter(3)) 
with open("Newfile.csv", "wb") as f: 
     fileWriter = csv.writer(f, delimiter=',') 
     for row in sortedlist: 
      fileWriter.writerow(row) 

的代码时,我排序与第一列.....“operator.itemgetter(0)”的CSV上面的代码正在工作。

但是当我把(3)或任何其他比0 .....这是给错误如下

IndexError:列表索引超出范围

我的CSV文件看起来像

IP_range,Mask,Ad1,Ad2,Ad3 
10.0.140.0, 255.255.0.0, 199u, Seattle, Fourth Avenue 
10.0.140.1, 255.255.0.0, 193u, Windsor, Popular Avenue 

我无法理解的issue..I试图用不同的delimiters..but没有运气

+1

你已经张贴足够的数据来重现你的错误,很可能你的CSV的之一相同的格式或者格式不正确或不作为,你需要做更多的调试,其余 – EdChum

+0

你确定了'csv'的分隔符是','和多个列? – luoluo

+0

对于示例数据,我假设您已转储的csv数据中有新行。现在对于给定的数据,排序工作正常。但是,如果csv不正确(例如,只有2列而不是5),则问题是可重现的。 –

回答

0

尝试删除错误格式化线使用list comprehension

同时在读取文件时使用with语句。

import csv 
import operator 
with open('one.csv', 'r') as ifile: 
    ireader = [i for i in csv.reader(ifile, delimiter=',') if len(i) >3] #covert works here 
    sortedlist = sorted(ireader, key=operator.itemgetter(3)) 
    with open("Newfile.csv", "wb") as f: 
     fileWriter = csv.writer(f, delimiter=',') 
     for row in sortedlist: 
      fileWriter.writerow(row)