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
- This is the simplest and most recent implementation of string formatting.
- f-Strings: A New and Improved Way to Format Strings in Python
- PEP 498 – Literal String Interpolation
- The string is preceded by an
fand the variable is inside the string quotes, surrounded by{}.f"file_{i}.dat"
- Reading and Writing Files
- The advantage is that the file is properly closed after its suite finishes, even if an exception is raised at some point.
- For python 3, this use
rangenotxrange f.write(f'{func(i)}')orf.write(str(func(i)))
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