简体   繁体   中英

AttributeError: 'str' object has no attribute 'write'

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

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 . eg 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

To stay as close to your script as possible:

>>> _headers = ('id',
...             'recipient_address_1',
...             'recipient_address_2',
...             'recipient_address_3',
...             'recipient_address_4',
...             'recipient_address_5',
...             'recipient_address_6',
...             'recipient_postcode',
...            )
>>> done = "Operation successfully completed"
>>> with open('outfile', 'w') as f:
...     for line in _headers:
...         f.write(line + "\n")
...     print done
Operation successfully completed

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM