I'm working on Python and have defined a variable called "_headers" as shown below
_headers = ('id', 'recipient_address_1', 'recipient_address_2', 'recipient_address_3', 'recipient_address_4', 'recipient_address_5', 'recipient_address_6', 'recipient_postcode', )
and in order to write this into an output file, I've written the following statement but it throws me the error "AttributeError: 'str' object has no attribute 'write'"
with open(outfile, 'w') as f: outfile.write(self._headers) print done
Please help
The Python "AttributeError: 'str' object has no attribute" occurs when we try to access an attribute that doesn't exist on string objects. To solve the error, make sure the value is of the expected type before accessing the attribute.
If you are getting an object that has no attribute error then the reason behind it is because your indentation is goofed, and you've mixed tabs and spaces.
The Python "AttributeError: 'str' object has no attribute 'append'" occurs when we try to call the append() method on a string (e.g. a list element at specific index). To solve the error, call the append method on the list or use the addition (+) operator if concatenating strings.
Solution for AttributeError Errors and exceptions in Python can be handled using exception handling i.e. by using try and except in Python. Example: Consider the above class example, we want to do something else rather than printing the traceback Whenever an AttributeError is raised.
You want f.write
, not outfile.write
...
outfile
is the name of the file as a string. f
is the file object.
As noted in the comments, file.write
expects a string, not a sequence. If you wanted to write data from a sequence, you could use file.writelines
. e.g. f.writelines(self._headers)
. But beware, this doesn't append a newline to each line. You need to do that yourself. :)
Assuming that you want 1 header per line, try this:
with open(outfile, 'w') as f: f.write('\n'.join(self._headers)) print done
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With