IndexError:列表索引超出范围。 (尝试查找一个txt文件的元素并将其替换为另一个txt文件

时间:2019-04-27 10:12:36

标签: python python-3.x list

从这里开始是python程序员。我目前坚持编写一个小的python脚本,该脚本将打开txt源文件,并使用正则表达式(在这种情况下为107.5)在该源文件中找到一个特定的数字,并最终用一个新数字替换该107.5。新号码来自另一个包含30个数字的txt文件。每次替换数字时,脚本都会使用下一个数字进行替换。尽管命令提示符似乎确实可以成功打印并替换,但是在第30次循环之后会出现“ IndexError:列表索引超出范围” ...

我的饥饿感是我必须以某种方式将循环限制为“ for i in range x”。但是,我不确定这应该是哪个列表,以及如何在当前代码中合并该循环限制。任何帮助深表感谢!

nTemplate = [" "]

output = open(r'C:\Users\Sammy\Downloads\output.txt','rw+')

count = 0

for line in templateImport:
   priceValue = re.compile(r'107.5')

   if priceValue.sub(pllines[count], line) != None:
      priceValue.sub(pllines[count], line)
      nTemplate.append(line)
      count = count + 1
      print('found a match. replaced ' + '107.5 ' + 'with ' + pllines[count] )
      print(nTemplate)

   else:
      nTemplate.append(line)

1 个答案:

答案 0 :(得分:0)

之所以引发def permCheck(a: Array[Int]): Int = { def maxAndHash(a: Array[Int], hash: HashSet[Int], max: Int, acc: Int): Option[(Int, Int)] = a match { case Array() => Some((max, acc)) case _ => { val head = a.head if (hash.contains(head)) None else maxAndHash(a.tail, hash + head, if (max < head) head else max, acc + 1) } } maxAndHash(a, HashSet[Int](), Int.MinValue, 0) match { case None => 0 case Some((max, acc)) => if (acc == max) 1 else 0 } } 是因为您在循环的每次迭代中都递增IndexError,但是没有根据count列表实际包含的值添加上限。您应该在到达pllines时退出循环,以免出错。

您可能尚未注意到的另一个问题是使用len(pllines)方法。它返回带有适当替换的新字符串,而不修改原始字符串。

如果字符串中不存在该模式,它将返回原始值本身。因此,您的re.sub()列表可能从未附加任何替换的字符串。除非在行中找到该模式,否则除非您需要执行其他操作,否则您可以取消nTemplate条件(就像我在下面的示例中那样)。

由于if对象的所有行都是相同的,因此可以将其移到循环之外。

以下代码应该起作用:

priceValue