Python 仅使用csv.DictReader打开文件时出现TypeError?

Python 仅使用csv.DictReader打开文件时出现TypeError?,python,csv,Python,Csv,我刚刚通过一个表单上传了这个CSV文件,并将其发布到我的Python CGI脚本中。上载似乎已成功完成。文件夹的权限为777,文件的权限为755 >>> import csv >>> csvHandle = open('files/TestData.csv', "rb") >>> csvRawRecordDicts = csv.DictReader(csvHandle) Traceback (most recent call last):

我刚刚通过一个表单上传了这个CSV文件,并将其发布到我的Python CGI脚本中。上载似乎已成功完成。文件夹的权限为777,文件的权限为755

>>> import csv
>>> csvHandle = open('files/TestData.csv', "rb")
>>> csvRawRecordDicts = csv.DictReader(csvHandle)

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: __init__() takes at least 3 arguments (2 given)
导入csv >>>csvHandle=open('files/TestData.csv',“rb”) >>>csvRawRecordDicts=csv.DictReader(csvHandle) 回溯(最近一次呼叫最后一次): 文件“”,第1行,是否在中? TypeError:\uuuu init\uuuu()至少接受3个参数(给定2个) 数值如下:

csvRawRecordDicts undefined, 
csv = <module 'csv' from '/usr/lib/python2.3/csv.pyc'>, 
csv.DictReader = <class csv.DictReader>, 
csvHandle = <open file 'files/TestData.csv', mode 'rb'>
csvRawRecordDicts未定义,
csv=,
csv.DictReader=,
csvHandle=
该代码在本地计算机上使用Python 2.5运行良好。错误发生在2.3版本


调试这样的东西的思想过程是什么?我从哪里开始找呢?

您可以做以下几件事:

  • 阅读并查看
    DictReader
    至少需要两个参数,同时传递一个参数
  • 尝试执行帮助(csv.DictReader),并得出相同的结论

由于阅读文档可能会解释第二个参数应该是
字段名
(我认为列表就足够了),重要的是,此信息在错误消息中传达了

沉默的幽灵说的一切,加上:

重点的改变:在我看来,最重要的一点是仔细阅读错误消息。在这种情况下,它简单明了地告诉你,你需要提供另一个论点。检查以下帮助(或正在运行的Python版本的文档):


另一点:确保您理解代码在做什么。csv.DictReader()不打开文件。文件系统权限不相关--您已打开该文件并将句柄传递给csv.DictReader()

我明白了,我最初是在阅读了Python2.5后在上面开发代码的,上面说“fieldnames”是可选的。我看到它在2.3中不是可选的!还感谢您的帮助()tip.CSV文件位于下面的文本中;您应该使用
'r'
@Ignacio的模式:csv.reader和csv.writer(Python 2.3到2.6)的文档完全错误,它们说“如果csvfile是一个文件对象,那么在有区别的平台上,它必须使用“b”标志打开。”。如果csvfile是一个文件对象,则最好将其表示为“”,在有区别的平台上,它必须使用“b”标志打开。为了便于移植,请无条件地使用“b”打开。此外,OP是在a*x平台上的,在那里忽略了“b”标志。我在自学Python,并没有立即意识到任何形式的_uinit__;()出现在整个事件中的原因。。我希望它能明确地说csv.DictReader()需要三个参数。更让人困惑的是,它在我的本地计算机2.5上运行得很好——考虑到我遇到的所有其他问题,我开始相信将脚本从PHP5移植到PHP4比从Python 2.5移植到2.3更简单。。。