[Tutor] csv.reader: bad argument type

Kent Johnson kent37 at tds.net
Wed Jan 23 14:04:46 CET 2008


tetsuo2k6 at web.de wrote:

> import csv
> import MySQLdb
> import sys
> 
> try:
>          datei = sys.argv[1]
> except:
>          print("Usage: insert_into_db <.csv-file>")
> 
> # convert csv to list
> reader = csv.reader(open(datei, "rb"), delimiter = ";", quotechar = "", 
> quoting = csv.QUOTE_NONE)
> </snip>
> 
> After copying it to the server, it says:
> 
> server1:/usr/local/sbin# ./insert_dgf_customers.py /usr/local/sbin/my.csv
> Traceback (most recent call last):
>    File "./insert_dgf_customers.py", line 27, in ?
>      reader = csv.reader(open(datei, "rb"), delimiter = ";", quotechar = 
> "", quoting = csv.QUOTE_NONE)
> TypeError: bad argument type for built-in operation
> 
> 
> The file my.csv is a test file and correctly formatted (it's the same 
> file that worked on the other machine).

It doesn't seem to get as far as actually reading the file.

> I thought the built-in operation meant here is open(), but without 
> putting csv.reader() around it everything works fine... And I guess 
> csv.reader is _not_ built-in, for it from the module - is that correct?

csv.reader is not built-in, that is correct. But it is implemented in C 
so you won't get a good traceback into where the failure is actually 
occurring.

What version of Python is on the two machines?

A couple of things to try, maybe some hints will come out:
- print the value of datei just to make sure nothing funny there
- split the open to a separate line to make sure it is the call to 
reader that is the problem:
f = open(datei, "rb")
reader = csv.reader(f, delimiter = ";", quotechar = "", quoting = 
csv.QUOTE_NONE)

Kent


More information about the Tutor mailing list