gpt4 book ai didi

python - 列表索引超出范围,使用 split()

转载 作者:行者123 更新时间:2023-11-28 22:49:13 25 4
gpt4 key购买 nike

我正在学习 Python,并且正在尝试学习 data.split()。我在另一个 StackOverflow 问题 (link here) 中发现以下内容,讨论在 Python 中附加文件。

我已根据上述链接创建了 biki.txt。这是我的代码:

import re
import os
import sys
with open("biki.txt","r") as myfile:
mydata = myfile.read()
data = mydata.replace("http","%http")
for m in range (1,1000):
dat1 = data.split("%")[m]
f = open ("new.txt", "a")
f.write(dat1)
f.close()

但是当我运行上面的命令时,我得到了错误:

dat1 = data.split("%")[m]
IndexError: list index out of range

怎么会?我找不到关于 [m] 功能的文档,但删除它并不能解决问题。 (如果我删除 [m],则错误会更改并指出 f.write(dat1) 必须是字符串,或只读字符缓冲区 (?)。

感谢您的任何帮助或想法!

最佳答案

首先,您需要了解代码中的 m 发生了什么。假设:

for m in range(1,1000):
print(m)

在第一个循环中,m的值将等于1。

在下一个循环中(直到 m 小于 1000)m 的值将为 m+1,我的意思是,如果在上一个循环中 m 的值为 1,那么在这个循环中 m 将等于到 2.

其次,您需要了解表达式 data.split('%') 将在找到“%”字符的位置拆分字符串,并返回一个列表。

例如,假设:

data = "one%two%three%four%five"
numbers = data.split('%')

numbers 将是一个包含五个元素的列表,如下所示:

numbers = ['one','two','three','four','five']

要获取列表中的每个元素,您必须为列表添加下标,这意味着使用花哨的 [] 运算符和索引号(实际上,您可以做更多,例如 slicing ):

numbers[0] # will return 'one'
numbers[1] # will return 'two'
...
numbers[4] # will return 'five'

请注意,列表中的第一个元素的索引为 0。

列表编号有 5 个元素,索引从 0 开始,因此,最后一个元素的索引为 4。如果您尝试使用大于 4 的索引下标,Python 解释器将引发 IndexError 因为在这样的索引处没有元素。

您的代码生成的列表中的元素少于您创建的范围。因此,列表索引在 for 循环完成之前就已经用完了。我的意思是,如果 dat1 有 500 个元素,当 m 的值为 500(不要忘记列表索引以 0 开头)时会引发 IndexError。

如果我得到了你想要做的,你可以用这段代码实现你的目标:

with open("input.txt","r") as file_input:
raw_text = file_input.read()

formated_text = raw_text.replace("http","%http")
data_list = formated_text.split("%")

with open("output.txt","w") as file_output:
for data in data_list:
file_output.write(data+'\n') # writting one URL per line ;)

关于python - 列表索引超出范围,使用 split(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com