我使用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()
答案 0 :(得分:3)
csv
模块docs中的脚注:
如果未指定
newline=''
,则嵌入换行符 内部引用字段将无法正确解释,并且打开 将添加使用\r\n
线条写入额外\r
的平台。 从csv模块开始,指定newline=''
应始终是安全的 做自己的(通用)换行处理。
Windows碰巧是一个使用\r\n
进行行结尾的平台。这就是为什么你要获得特定于平台的行为;通过将newline=''
指定为open
来摆脱它。
答案 1 :(得分:0)
sorted
都能正常运行。回溯告诉您错误发生的确切位置,显然它与您的数据不一致(或者不被csv模块解释为)您认为它们应该是 - 分隔符错误或源文件较少超过四列。