我使用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()
发布于 2013-11-18 11:07:23
csv
模块文档中的脚注
如果没有指定
newline=''
,那么嵌入在引用字段中的换行符将无法正确解释,并且在使用\r\n
行的平台上将添加一个额外的\r
。指定newline=''
应该是安全的,因为csv模块执行自己的(通用)换行符处理。
Windows恰好是一个(...the)平台,它使用\r\n
作为行尾。这就是为什么您要获得特定于平台的行为;通过将newline=''
指定为open
来消除它。
发布于 2013-11-18 11:06:27
不管平台是什么,sorted
都能很好地工作。跟踪会告诉您错误发生的确切位置,很明显,这与您的数据不是您认为它们应该是什么(或者不是csv模块所认为的那样)有关--或者分隔符是错误的,或者源文件的列数少于四列。
https://stackoverflow.com/questions/20055535
复制相似问题