20

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?

lovespeed
  • 4,835
  • 15
  • 41
  • 54

5 Answers5

33

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))
phihag
  • 278,196
  • 72
  • 453
  • 469
4

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.

Kunal Vyas
  • 1,499
  • 1
  • 23
  • 40
Azodious
  • 13,752
  • 1
  • 36
  • 71
4

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.

BrenBarn
  • 242,874
  • 37
  • 412
  • 384
3

Try this:

for i in xrange(10):
   with open('file_{0}.dat'.format(i),'w') as f:
       f.write(str(func(i)))
Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284
0

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)}')
Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158