定义文件对象的列表,用于定义指向一个文件一个文件对象,在Python我们只是写:如何在Python
f = open ('file_name.txt','wb')
我想在一些情况下知道(可以说50)文件,我怎么能创建一个50个文件对象的数组(或在python术语列表中),每个文件对象都指向名称中具有相同索引的文本文件?
定义文件对象的列表,用于定义指向一个文件一个文件对象,在Python我们只是写:如何在Python
f = open ('file_name.txt','wb')
我想在一些情况下知道(可以说50)文件,我怎么能创建一个50个文件对象的数组(或在python术语列表中),每个文件对象都指向名称中具有相同索引的文本文件?
列表在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)]
小心开太多,虽然因为这可能成为一个内存问题。
内存问题少于用完的文件描述符。 – chepner
这里是如何创建的文件列表:
myfiles=[]
for i in range(3):
f = open ('file'+str(i),'wb')
myfiles.append(f)
myfiles[0].write("hello world")
除了Guilaumes回答您也可以使用列表理解(文档here)是这样的:
myFiles = [ open('file'+str(i)+'.txt', 'wb') for i in range(3) ]
myFiles[0].write('hello world'
文件就像在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个文件开放是不太可能造成一个现代化的操作系统上的问题,你应该知道,有你可以要求操作系统的资源上限。
我有些疑惑,为什么你会认为这是一个好主意 –
我很想知道预期的应用是什么,或者这个问题是否只是出于好奇。但是我可以考虑应用程序,它可能是一个好主意(例如将文件分成多个文件,每个文件都对应于字母表的大写或小写字母)。 – holdenweb
@holdenweb对于需要单独分类的日志记录可能很有用。但我不确定什么时候用列表而不是字典来做这件事会有好处。 – SuperBiasedMan