<p>首先,您需要了解代码中m的情况。假设:</p>
<pre><code>for m in range(1,1000):
print(m)
</code></pre>
<p>在第一个循环中,m的值将等于1。</p>
<p>在下一个循环中(直到m小于1000),m的值将是m+1,我的意思是,如果在上一个循环中m的值是1,那么,在这个循环中m将等于2。</p>
<p>其次,您需要了解表达式data.split('%')将在找到“%”字符的位置拆分字符串,并返回一个列表。</p>
<p>例如,假设:</p>
<pre><code>data = "one%two%three%four%five"
numbers = data.split('%')
</code></pre>
<p>数字将是一个包含以下五个元素的列表:</p>
<pre><code>numbers = ['one','two','three','four','five']
</code></pre>
<p>要获取列表中的每个元素,必须为列表下标,这意味着使用花哨的[]运算符和索引号(实际上,您可以做更多的工作,如<a href="https://docs.python.org/3.4/tutorial/introduction.html#lists" rel="nofollow">slicing</a>):</p>
<pre><code>numbers[0] # will return 'one'
numbers[1] # will return 'two'
...
numbers[4] # will return 'five'
</code></pre>
<p>请注意,列表中的第一个元素具有索引0。</p>
<p>列表号有5个元素,索引从0开始,因此,最后一个元素将有索引4。如果尝试使用高于4的索引下标,则Python解释器将引发一个索引器错误,因为该索引中没有元素。</p>
<p>您的代码正在生成一个元素少于您创建的范围的列表。因此,在for循环完成之前,列表索引将被耗尽。我的意思是,如果dat1有500个元素,当m的值是500(不要忘记列表索引以0开头)时,会引发索引器错误。</p>
<p>如果我得到了您想要做的,您可以使用以下代码实现您的目标:</p>
<pre><code>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 ;)
</code></pre>