[英]Python readlines() doesn't function outputs bug in for loop
簡介:我目前是 Python 初學者學習語法。 我遇到過 python 原生支持的讀取和寫入文件的概念。 在嘗試循環讀取和寫入命令后,我想嘗試一下並找出錯誤。 我想從名稱文件中隨機選擇一個名稱,然后將其寫入一個新文件。 我的文件包含 19239 行名稱,randrange(18238) 從 0 - 18238 生成,並且據說會隨機讀取 1 - 18239 之間的一行。問題是讀寫代碼在沒有 for 循環的情況下工作,但是不是 for 循環。
我的嘗試:
from random import randrange
rdname = open("names.dat", "r")
wrmain = open("main.dat", "a")
rdmain = open("main.dat", "r")
for x in range(6):
nm = rdname.readlines()[randrange(18238)]
print(str(randrange(18238)) + ": " + nm)
wrmain.write("\n" + nm)
...
錯誤代碼:
Exception has occurred: IndexError
list index out of range
rdname.readlines()
耗盡您的文件句柄。 第一次運行rdname.readlines()
會為您提供行列表,但隨后每次都會返回一個空列表。 顯然,您無法訪問空列表中的元素。 要解決此問題,請在循環之前將readlines()
的結果分配給變量一次。
rdlines = rdname.readlines()
maxval = len(rdlines)
for x in range(6):
randval = randrange(maxval)
nm = rdlines[randval]
print(str(randval) + ": " + nm)
wrmain.write("\n" + nm)
此外,確保您的隨機數只能達到列表的長度是一個好主意。 不需要對列表的長度進行硬編碼len()
函數會給你。
我強烈建議你看看如何調試小程序。 使用調試器單步調試代碼非常有用,因為您可以看到每一行如何影響變量的值。 在這種情況下,如果您在每次迭代中查看nm
的值,很明顯為什么您會得到IndexError
,並且發現nm
在readlines()
上變成一個空列表將指向答案的方向.
祝你的編程之旅好運。
readlines()
方法。 有一些非直覺的行為。 當您使用readlines()
它會“轉儲”文件的全部內容並返回每行的字符串列表。 因此,第二次調用rdname.readlines()[randrange(18238)]
, rdname
文件對象完全為空,實際上您有一個空列表。 因此,從功能[][randrange(18238)]
您是在告訴程序在循環的第二次迭代中運行[][randrange(18238)]
。
我還冒昧地修復了隨機數調用,因為您實現的方式意味着它會在選擇名稱nm = rdname.readlines()[randrange(18238)]
並打印所選名稱時調用 2 個不同的隨機數和 linenumber print(str(randrange(18238)) + ": " + nm)
...
rdname = open("names.dat", "r")
wrmain = open("main.dat", "a")
rdmain = open("main.dat", "r")
rdname_list = rdname.readlines()
for x in range(6):
rd_number = randrange(18238)
nm = rdname_list[rd_number]
print(str(rd_number) + ": " + nm)
wrmain.write("\n" + nm)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.