读取文件夹中存在的所有文件时出错

时间:2018-08-26 11:41:55

标签: python

我有一个包含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的新手,请原谅我,如果您发现这段代码很长,并且可以通过更优化的方式完成,请告诉我。

2 个答案:

答案 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'是默认语句,创建空列表的常用方法是使用[]