This error occurs when you try to call the split()
method on a File object. The split()
method is an attribute of the String class, not _io.TextIOWrapper
. You can solve this error by iterating over the File object using a for loop, for example:
for line in file: line.split()
Each line in the file is a string. Alternatively, you can call the read()
method on the File object, which returns a string on which you can call the split()
method.
This tutorial will go through how to solve the error with code examples.
Table of contents
AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘split’
AttributeError occurs in a Python program when we try to access an attribute (method or property) that does not exist for a particular object. The split method is an attribute of the String class, not the _io.TextIOWrapper class.
Example
Consider the following text file containing the names of five celebrities:
Leonardo DiCaprio Michael Jordan Franz Kafka Mahatma Gandhi Albert Einstein
We will save the celebrity names under the filename ‘celeb_names.txt
‘. Next, we will attempt to read the data into a program, split each name into first name and surname, and print the surnames. Let’s look at the code:
with open('celeb_names.txt', 'r') as f: first_names, surnames = f.split() print(surnames)
Let’s run the code to see what happens:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [2], in <cell line: 1>() 1 with open('celeb_names.txt', 'r') as f: ----> 2 first_names, surnames = f.split() 3 print(surnames) AttributeError: '_io.TextIOWrapper' object has no attribute 'split'
The error occurs because we try to call split()
on the File object returned by the open()
function call. The split()
method is an attribute of the String
class. We can find out what attributes an object has with the built-in dir()
function, for example:
with open('celeb_names.txt', 'r') as f: attributes = dir(f) print('split' in attributes)
False
We checked for membership of the split method in the list of attributes for the File object returned by the dir()
function. The result is False
, confirming that split is not a TextIOWrapper
method.
Solution
We can solve this error by iterating over the lines in the File object using a for
loop. Let’s look at the revised code:
with open('celeb_names.txt', 'r') as f: for line in f: print(type(line)) first_name, surname = line.split() print(f'Celebrity surname: {surname}')
The f
variable is a buffered text stream, and the expression for line in f iterates over the stream using the new line delimiter until it reaches the end-of-file. Each line is of type String, and we can call the split()
method as it is a String method. We can verify the type of an object using the built-in type()
method. Let’s run the code to see the result:
<class 'str'> Celebrity surname: DiCaprio <class 'str'> Celebrity surname: Jordan <class 'str'> Celebrity surname: Kafka <class 'str'> Celebrity surname: Gandhi <class 'str'> Celebrity surname: Einstein
We successfully retrieved the surnames of each celebrity using the split()
method.
Summary
Congratulations on reading to the end of this tutorial.
For further reading on errors involving TextIOWrapper, go to the article:
- How to Solve Python TypeError: the JSON object must be str, bytes or bytearray, not ‘TextIOWrapper’
- How to Solve Python AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘append’
- How to Solve Python AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘next’
Go to the online courses page on Python to learn more about Python for data science and machine learning.
Have fun and happy researching!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.