动态文件名

时间:2010-08-14 17:19:38

标签: python filenames

所以我正在开发一个程序,我将数据存储到多个.txt文件中。我想要使​​用的命名约定是文件“xx”,其中X是数字,所以file00,file01,...一直到file20,我希望分配给它们的变量是fxx(f00,f01 ,. ..)。

如何使用for循环(或其他方法)在Python中访问这些文件,因此我不必输入open("fileXX") 21次?

5 个答案:

答案 0 :(得分:5)

名字是正规的。您可以使用简单的列表推导创建文件名列表。

["f%02d"%x for x in range(1,21)]

答案 1 :(得分:1)

查看python的glob module

它使用通常的shell通配符语法,因此??将匹配任意两个字符,而*将匹配任何内容。您可以使用f??.txtf*.txt,但前者是更严格的匹配,而后者则不匹配fact_or_fiction.txt之类的匹配。

E.g:

import glob
for filename in glob.iglob('f??.txt'):
    infile = file(filename)
    # Do stuff...

答案 2 :(得分:1)

t写入所有文件的示例:

for x in range(22): #Remember that the range function returns integers up to 22-1
    exec "f%02d = open('file%02d.txt', 'w')" % (x, x)

我使用exec语句,但可能有更好的方法。我希望你能得到这个想法。

注意:如果需要,此方法将为您提供变量名称fXX以便稍后使用。最后两行只是示例。如果您只需要将fileXX.txt分配给fXX,则根本不需要。

编辑:删除了最后两行,因为似乎人们对我把它们放在那里感到不满意。 对downvotes的解释总是很好。

答案 3 :(得分:1)

我认为关键是OP想要以编程方式注册变量:

for i in range( 20 ):
    locals()[ "f%02d" % i ] = open( "file%02d.txt" % i )

然后例如

print( f01 )
...

答案 4 :(得分:0)

files = [open("file%02d", "w") for x in xrange(0, 20+1)]
# now use files[0] to files[20], or loop

# example: write number to each file
for n, f in enumerate(files):
  files.write("%d\n" % n)

# reopen for next example
files = [open("file%02d", "r") for x in xrange(0, 20+1)]
# example: print first line of each file
for n, f in enumerate(files):
  print "%d: %s" % (n, f.readline())