如何在python中定义文件对象列表
为了定义指向文件的单个文件对象,在python中,我们只需编写:如何在python中定义文件对象列表,python,arrays,python-2.7,object,Python,Arrays,Python 2.7,Object,为了定义指向文件的单个文件对象,在python中,我们只需编写: f = open ('file_name.txt','wb') 我想知道,如果有几个(比如说50个)文件,如何创建一个包含50个文件对象的数组(或者在python术语列表中),每个对象都指向一个名称中具有相同索引的文本文件 以下是如何创建文件列表: myfiles=[] for i in range(3): f = open ('file'+str(i),'wb') myfiles.append(f) myfi
f = open ('file_name.txt','wb')
我想知道,如果有几个(比如说50个)文件,如何创建一个包含50个文件对象的数组(或者在python术语列表中),每个对象都指向一个名称中具有相同索引的文本文件 以下是如何创建文件列表:
myfiles=[]
for i in range(3):
f = open ('file'+str(i),'wb')
myfiles.append(f)
myfiles[0].write("hello world")
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)]
但要小心打开太多,因为这可能会导致记忆问题。除了Guilaume的答案外,您还可以使用如下列表理解(文档):
myFiles = [open('file'+str(i)+'.txt', 'wb') for i in range(3)]
myFiles[0].write('hello world')
文件和Python中的其他对象一样都是对象。因此,正如您可以使用将字符串放入列表
lst
lst[n] = "value"
或
因此,当您理解open()
函数返回文件对象时,您可以使用
lst[n] = open(filename, 'wb')
或
因此,要创建一个打开文件的列表,您只需使用循环中计算文件名的最后一个示例(尽管如果已经有文件名列表,您也可以轻松地迭代文件名列表)
这可以在使用列表理解的单个表达式中更紧凑(但也更不透明)地实现。口味不同
file_list = [open("file{}.txt".format(i), 'wb') for i in range(50)]
虽然打开50个文件不太可能在现代操作系统上造成问题,您应该知道,操作系统所需的资源有上限。内存问题比可用文件描述符不足要少。我怀疑您为什么会认为这是一个好主意。我有兴趣知道预期的应用程序是什么,或者这个问题仅仅是出于好奇。但我可以想到一些可能是个好主意的应用程序(例如将一个文件拆分为多个文件,每个文件对应于字母表的大写或小写字母)。@holdenweb它可能对需要单独分类的日志记录有用。但是我不确定什么时候用列表而不是字典来做这件事是有益的。我们都可以想象用例,不是吗?但它们与这个问题相关吗?
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)]