IndexError: list index out of range - PythonError

IndexError: list index out of range - PythonError

我正在创建一个程序,它应该根据 'clouds.txt' 的每一行创建一个文件 (.txt)。这是我的代码:

def CreateFile():
    global file_name
    f = open(file_name,"w+")
    f.write(list_email + ":")
    f.close()

def WriteInConfig():
    f = open("config/config.txt","a")
    f.write(list_name + "\n")
    f.close()



with open("clouds.txt","r") as f:
    
    list_lines = sum(1 for line in open('clouds.txt'))
    
    lines = f.readline()
    for line in lines:
            
        first_line = f.readline().strip()
        list_email = first_line.split('|')[1] #email
        print("Email: " + list_email)

        list_pass = first_line.split('|')[2] #pass
        print("Pass: " + list_pass)
            
        list_name = first_line.split('|')[3] #name
        print(list_name)

        global file_name
        file_name = "config/." + list_name + ".txt"

        with open('clouds.txt', 'r') as fin:
            data = fin.read().splitlines(True)
        with open('clouds.txt', 'w') as fout:
            fout.writelines(data[1:])

        CreateFile()
        WriteInConfig()

clouds.txt 文件如下所示:

>|clouds.n1c0+mega01@gmail.com|cwSHklDIybllCD1OD4M|Mega01|15|39.91|FdUkLiW0ThDeDkSlqRThMQ| |x
|clouds.n1c0+mega02@gmail.com|tNFVlux4ALC|Mega02|50|49.05|lq1cTyp13Bh9-hc6cZp1RQ|xxx|x
|clouds.n1c0+mega03@gmail.com|7fe4196A4CUT3V|Mega03|50|49.94|BzW7NOGmfhQ01cy9dAdlmg|xxx|xxx >

在 'Mega48' 之前一切正常。我得到“IndexError:列表索引超出范围”

>|clouds.n1c0+mega47@gmail.com|bd61t9zxcuC1Yx|Mega47|50|10|Xjff6C8mzEqpa3VcaalUuA|xxx|x
|clouds.n1c0+mega48@gmail.com|kBdnyB6i0PUyUb|Mega48|50|0|R6YfuGP2hvE-uds0ylbQtQ|xxx|x
|clouds.n1c0+mega49@gmail.com|OcAdgpS4tmSLTO|Mega49|50|28.65|xxx|  >

我检查了一下,没有 spaces/other 个字符。如您所见,在创建文件后,程序删除了该行。错误发生后,如果我再次启动程序(并从 'Mega47' 开始),它不会显示错误,一切都按计划进行。

有什么解决办法吗?

我看到你的代码中有很多错误。首先,你想要这个 list_lines = sum(1 for line in open('clouds.txt')) 做什么? 你的 for 循环有问题,因为你做了 lines = f.readline() 所以 lines 是第一行,然后你做 for line in lines 其中 line 将是第一行的每个字符并且第一行中有更多字符比文件中要读取的行要多。

[已编辑]

您不需要知道文件中的行数来执行 for 循环。你可以只做 for line in f:,然后你不需要用 readline 再次读取该行它已经在变量 line