I have a simple function to read the csv file and extracts the first coloum from it:
import csv
def pass_username():
with open('test.csv', 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
return row[0]
When I call this function as:
a = pass_username()
print a
This only prints the first element. However, when I replace return
word with print
as print row[0]
and call the function as pass_username()
it prints all the elements. I want to assign that function to a variable thus I want to use return. How to fix it?
Content of test.csv:
"[email protected]","rockon"
"[email protected]","hey"
"[email protected]","ok"
"[email protected]","password"
As the other people who answered said, you can accumulate the results into a list and return that. Another way though, would be to replace return
with yield
which causes your function to return an iterable type object that produces the items you yield when you decide to iterate over it later (possibly with a for loop).
See: What does the "yield" keyword do in Python?
Here is how you would use it with your code:
import csv
def pass_username():
with open('test.csv', 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
yield row[0]
username_generator = pass_username()
# iterate through the usernames with a for loop
for name in username_generator:
print name
# call the list constructor which causes it to produce all of the names
print list(pass_username())
Keep in mind that the usernames are produced as they are needed, so you can, for example, do username_generator.next()
which will produce the next username without having to produce all of them.
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