buffer interface problem
andrew.gillanders at uqconnect.edu.au
Thu Jan 7 13:47:40 CET 2010
Thanks Chris. The atoi function was coming from the locale library
(from locale import atoi). I changed it to int and now it works.
The next hurdle is this:
gzin = GzipFile(fname, 'rb')
data = gzin.readline()
# min_x,min_y = map(atoi,data.split()[:2])
min_x,min_y = map(int,data.split()[:2])
data = gzin.readline()
# span_x,step_x,span_y,step_y = map(atoi,data.split()[:4])
span_x,step_x,span_y,step_y = map(int,data.split()[:4])
data = gzin.read().split('\n')
The last line is a problem, giving me this message: Type str doesn't
support the buffer API (I am guessing a conflict between split and
Sorry, I am new to Python, so how do I get a Traceback?
On 07/01/2010, at 7:13 PM, Chris Rebert wrote:
> On Thu, Jan 7, 2010 at 12:19 AM, Andrew Gillanders
> <andrew.gillanders at uqconnect.edu.au> wrote:
>> I have run into a problem running a Python script that is part of the
>> TerraGear suite for building scenery for FlightGear. I am using
>> Mac OS X
>> 10.4, running Python (version 3.0.1) in a Unix terminal.
>> The purpose of the script is to walk a directory tree, unzipping
>> files, and
>> passing the contents to an executable C program. The problem
>> occurs here:
>> gzin = GzipFile(fname, 'rb')
>> data = gzin.readline()
>> min_x,min_y = map(atoi,data.split()[:2])
>> The input file, when uncompressed, is an ASCII file with a line
>> with two
>> numbers, then a line of four numbers, then many long lines of
>> numbers. I can
>> see what the last is trying to do: split the string into two
>> words, convert
>> them to integers, and assign them to min_x and min_y.
>> At the third line, I get the message "expected an object with the
>> interface". Which object is it referring to?
> The elements of the list produced by `data.split()[:2]`, which are
> either Unicode strings or bytestrings, neither of which are buffers.
>> Have some functions been
>> changed to pass buffer objects instead of strings? How can I fix
>> the source
>> code to make it run?
> The error is being raised by the atoi() function (in the future,
> please post the full Traceback, not just the final error message).
> What module/library does your atoi() function come from (look for an
> `import` statement mentioning it)?
> The only functions by that name in the Python standard library both
> operate on strings, not buffers, and thus can't be the same one your
> code is using.
> In any case, replacing `atoi` with `int` in your code will likely
> solve the problem. The built-in int() function* can convert strings to
> *Not really a function, but close enough for newbie explanatory
More information about the Python-list