Creating a new file, filename contains loop variable, python

I want to run a function over a loop and I want to store the outputs in different files, such that the filename contains the loop variable. Here is an example

for i in xrange(10):
   f = open("file_i.dat",'w')
   f.write(str(func(i))
   f.close()

How can I do it in python?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Simply construct the file name with + and str. If you want, you can also use old-style or new-style formatting to do so, so the file name can be constructed as:

"file_" + str(i) + ".dat"
"file_%s.dat" % i
"file_{}.dat".format(i)

Note that your current version does not specify an encoding (you should), and does not correctly close the file in error cases (a with statement does that):

import io
for i in xrange(10):
   with io.open("file_" + str(i) + ".dat", 'w', encoding='utf-8') as f:
       f.write(str(func(i))

Method 2

Use f = open("file_{0}.dat".format(i),'w'). Actually, you might want to use something like f = open("file_{0:02d}.dat".format(i),'w'), which will zero-pad the name to keep it at two digits (so you get “file_01” instead of “file_1”, which can be nice for sorting later). See the documentation.

Method 3

Concatenate the i variable to a string as follows:

f = open("file_"+str(i)+".dat","w")

OR

f = open("file_"+`i`+".dat","w") # (`i`) - These are backticks, not the quotes.

See here for other techniques available.

Method 4

Try this:

for i in xrange(10):
   with open('file_{0}.dat'.format(i),'w') as f:
       f.write(str(func(i)))

Method 5

Use f-strings

def func(i):
    return i**2

for i in range(10):
    with open(f"file_{i}.dat", 'w') as f:
        f.write(f'{func(i)}')


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x