python排序函数似乎不适用于Windows

时间:2013-11-18 18:53:05

标签: python sorting

我使用python 3使用以下代码对csv文件进行排序。它完全适用于MAC,但在Windows(无论是真实的还是融合的)上,我得到了这个例外。有人见过这个或有建议吗?

Exception in Tkinter callback Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
File "Z:\bin\FDTSEfiles\HrsWonVal.py", line 470, in <lambda>
    Button(newOrExisting, text="OK", command=lambda: getnewOrExisting_File(U_cmd.get())).grid(row=5, column=1)
File "Z:\bin\FDTSEfiles\HrsWonVal.py", line 466, in getnewOrExisting_File
    reverseOrderAndFilterFile(existingFilePath)
File "Z:\bin\FDTSEfiles\HrsWonVal.py", line 510, in reverseOrderAndFilterFile
    sortedlist = sorted(data, key=operator.itemgetter(3))

# 3 specifies the 4th column - Date IndexError: list index out of range

我的代码:

data = csv.reader(open(reverseAndFilteredPathFileName),delimiter=',')
sortedlist = sorted(data, key=operator.itemgetter(3))   
with open(reverseAndFilteredPathFileName, "w") as f:
    fileWriter = csv.writer(f, delimiter=',')
    for row in sortedlist:
        fileWriter.writerow(row)
f.close() 

2 个答案:

答案 0 :(得分:3)

csv模块docs中的脚注:

  

如果未指定newline='',则嵌入换行符   内部引用字段将无法正确解释,并且打开   将添加使用\r\n线条写入额外\r的平台。   从csv模块开始,指定newline=''应始终是安全的   做自己的(通用)换行处理。

Windows碰巧是一个使用\r\n进行行结尾的平台。这就是为什么你要获得特定于平台的行为;通过将newline=''指定为open来摆脱它。

答案 1 :(得分:0)

无论平台如何,

sorted都能正常运行。回溯告诉您错误发生的确切位置,显然它与您的数据不一致(或者不被csv模块解释为)您认为它们应该是 - 分隔符错误或源文件较少超过四列。