Python 索引器:字符串索引超出范围:

Python 索引器:字符串索引超出范围:,python,list,dictionary,range,Python,List,Dictionary,Range,我尝试使用一个由88行填充的.txt文件,每行有两个字符,用空格分隔,将每行中的第一个字符复制到列表#1中,将每个列表的第二个字符复制到列表#2中,然后用这两个列表填充字典。但是,当我试图将文件中的数据复制到列表中时,出现了一些问题。你能告诉我我做得不对吗 我一直在键入“column1[count]=readit[0]”的行中出现以下错误:“IndexError:string index超出范围” def main(): modo=open('codes.txt','r')#打开文件 filez

我尝试使用一个由88行填充的.txt文件,每行有两个字符,用空格分隔,将每行中的第一个字符复制到列表#1中,将每个列表的第二个字符复制到列表#2中,然后用这两个列表填充字典。但是,当我试图将文件中的数据复制到列表中时,出现了一些问题。你能告诉我我做得不对吗

我一直在键入“column1[count]=readit[0]”的行中出现以下错误:“IndexError:string index超出范围”

def main():
modo=open('codes.txt','r')#打开文件
filezise=0#初始化计数器
对于modo中的线路:
filezise+=1#计算文件中的行数
column1=[]*filezise
column2=[]*filezise#使列表与文件一样大
计数=0#初始化下一个计数器
当计数
当你写

 for line in modo:
        filezise+=1  
您已经使用了该文件。 如果您想再次使用它,您需要先执行
modo.seek(0)
将文件倒回

如果不倒带文件,下面的行将返回一个空字符串,因为文件中没有任何内容

readit = str(modo.readline())
当然,没有必要把文件翻两遍。您可以只做一次,然后附加到列表中

column1 = []
column2 = []
for line in modo:
   filezise+=1
   column1.append(line[0])
   column2.append(line[2])

出现此错误是因为
column1=[]*filezise
实际上没有列出长度filezise。(如果查看结果,您将看到
column1
只是一个空列表。)当您尝试在
count>0
时访问
column1[count]
时,您将得到该错误,因为
column1
中没有索引大于0的内容

您不应该尝试初始化列表。相反,在文件中的行上迭代并附加适当的字符:

column1=[]
column2=[]
for line in file('codes.txt'):
    column1.append(line[0])
    column2.append(line[2])

通过使用和内置函数,有一种更简单的方法从文件中获取词典:

import csv

with open('codes.txt', 'rb') as csvfile:
    codebook = dict(csv.reader(csvfile, delimiter=' '))
试试这个

codebook =  dict([''.join(line.strip().split(' ')) for line in open('codes.txt').readlines()])

只要不使用中间列表,您也可以使用字典理解一次性完成所有操作

with open('codes.txt', 'r') as f:
    codebook = {line[0]: line[-1] for line in f.read().splitlines()}

readit是一个字符串,而不是一个列表。@Marichyasana,我想他知道这一点,但他仍然可以索引到其中。
with open('codes.txt', 'r') as f:
    codebook = {line[0]: line[-1] for line in f.read().splitlines()}