2015-05-21 32 views
-1

定义文件对象的列表,用于定义指向一个文件一个文件对象,在Python我们只是写:如何在Python

f = open ('file_name.txt','wb') 

我想在一些情况下知道(可以说50)文件,我怎么能创建一个50个文件对象的数组(或在python术语列表中),每个文件对象都指向名称中具有相同索引的文本文件?

+0

我有些疑惑,为什么你会认为这是一个好主意 –

+0

我很想知道预期的应用是什么,或者这个问题是否只是出于好奇。但是我可以考虑应用程序,它可能是一个好主意(例如将文件分成多个文件,每个文件都对应于字母表的大写或小写字母)。 – holdenweb

+0

@holdenweb对于需要单独分类的日志记录可能很有用。但我不确定什么时候用列表而不是字典来做这件事会有好处。 – SuperBiasedMan

回答

4

列表在Python只是一个参考的集合,他们可以指任何你想要的,包括一个文件对象。

files = [ 
      open("file1.txt",'wb') 
      open("file2.txt",'wb') 
      open("file3.txt",'wb') 
      ... 
     ] 

根据你想如何收集它们,你可能会使用一个发电机。例如

files = [open("file_{}".format(x),'wb') for x in range(12)] 

或者,如果你想从一个文件夹中的所有文件:

files = [open(file, 'wb') for file in os.listdir(yourFolder)] 

小心开太多,虽然因为这可能成为一个内存问题。

+2

内存问题少于用完的文件描述符。 – chepner

1

这里是如何创建的文件列表:

myfiles=[] 
for i in range(3): 
    f = open ('file'+str(i),'wb') 
    myfiles.append(f) 

myfiles[0].write("hello world") 
4

除了Guilaumes回答您也可以使用列表理解(文档here)是这样的:

myFiles = [ open('file'+str(i)+'.txt', 'wb') for i in range(3) ] 

myFiles[0].write('hello world' 
0

文件就像在Python一切物体。所以,就像你可以把一个字符串转换成一个列表lst

lst[n] = "value" 

lst.append(value) 

所以,当你理解了的open()函数返回一个文件对象,你可以把一个文件到列表与

lst[n] = open(filename, 'wb') 

lst.append(open(filename, 'wb') 

因此,要创建一个打开的文件列表,您可以简单地使用计算文件名的循环中的最后一个例子(尽管如果您已经拥有它们,您可以轻松地遍历文件名列表)。

file_list = [] 
for i in range(50): 
    filename = "file{}.txt".format(i) 
    file_list.append(open(filename, 'wb')) 

这可以在使用列表理解的单个表达式中更简洁地实现(但也更加不透明)。口味不同。

file_list = [open("file{}.txt".format(i), 'wb') for i in range(50)] 

虽然有50个文件开放是不太可能造成一个现代化的操作系统上的问题,你应该知道,有你可以要求操作系统的资源上限。