我有一个包含50个文件的目录,并且我想读取每个文件并将该文件的所有文本存储在列表的索引中,因此在进行一些研究之后,我编写了以下代码,但此行给我错误:>
filedata[i]=filee.read()
IndexError: list assignment index out of range
这是代码:
import os
filedata = list()
for dirpath, dirnames, filenames in os.walk('Doc50'):
print(filenames[4])
i=1
for file in filenames:
fpath = os.getcwd()
fpath = os.path.join(fpath, str(dirpath))
fpath = os.path.join(fpath, str(filenames[i]))
filee = open(fpath,mode='r')
print("value of i: " + str(i))
filedata[i]=filee.read()
filee.close()
i=i+1
print(filedata)
我是python的新手,请原谅我,如果您发现这段代码很长,并且可以通过更优化的方式完成,请告诉我。
答案 0 :(得分:0)
我发现了一个错误:数组和列表的索引从0开始。 尝试获取仅包含2个项目的列表的列表[2]时出现IndexError。
如前所述,列表从0开始,所以list [2]表示列表项目编号3。
for dirpath, dirnames, filenames in os.walk('Doc50'):
print(filenames[4])
i=1
将i=1
替换为i=0
答案 1 :(得分:0)
列表与其他语言中的数组不同;它们没有预定的大小并且不稀疏。
因此,当列表的长度为0
时分配给特定的索引会引发IndexError
,因为您说的是“在那里将第i
个元素重新分配为”不是第i
个元素”。
相反,您希望将元素追加到列表的末尾。
此外,您的代码还有许多其他令人困惑的部分,因此,下面的代码将只产生当前工作目录中每个文件内容的字符串列表,而不是试图弄乱它。包括Python脚本本身,因此您可能希望过滤掉脚本名称)。
import os
file_data = []
files_in_cwd = os.listdir()
for file_name in files_in_cwd:
with open(file_name) as file_handler:
file_data.append(file_handler.read())
print(file_data)
请注意,打开文件时应始终使用with
语句,并且mode='r'
是默认语句,创建空列表的常用方法是使用[]
。