提前道歉-我是新的编码,所以这可能是一个愚蠢的问题!在
{I}从本地文件中随机读取一个文本,然后从列表中读取。在
但是,我不想打印任何空行,只打印包含文本的行。在
所以我尝试使用以下代码:
import random
with open('C:\\big.txt', 'r') as f:
while True:
random_line_str = random.choice(f.readlines())
random_line_lst = random_line_str.split()
if random_line_lst != []:
print(random_line_lst)
break
因此,对于包含文本的行来说,这很好。但偶尔也会出现以下错误:
^{pr2}$老实说,我不知道这是怎么回事。。。在
有什么办法避免这种情况发生,只返回包含文本的行吗?在
干杯!在
不,你没有检查。而是检查列表变量
random_line_lst
是否不存在于[]
中,因为[]
是空的,并且其中不存在任何内容,所以总是正确的。所以if random_line_lst not in []:
检查不正确。在您不需要检查:
或者一个捷径(和更好的形式)是检查
^{pr2}$因为空列表是假的。在
另外,您不能在循环内调用
f.readlines()
always。在循环开始之前,您需要将这些行保存在变量中,否则下次循环运行时将得到一个IndexError
。原因是在f.readlines()
的第一次调用中,整个文件被读取,而在下一次调用中,文件位置已经在文件末尾,所以下次读取将返回空列表,除非您寻求文件的零位置。对于您的情况,您只需将readlines()
调用移出循环。在此行不检查项是否为空列表,而是检查该项是否在空列表中,这将始终为false(意味着
item not in []
将始终为true):由于
^{pr2}$bool([])
为False,您可以这样做:如果要显式检查空列表,请使用
!=
运算符。在使用上面的代码,您的代码将变成:
编辑
对于
random.choice
,问题是您在f.readlines()
上反复调用random.choice
。Readlines只在第一次调用时返回每一行,之后只返回一个空序列。random.choice
无法从空序列中选择项目。更好的策略是:或者,如果您可以摆脱随机性,请使用以下方法:
我觉得您可以在这种情况下使用strip方法,因为即使行是空的,您仍然会有与该行相关联的回车符。所以你可以检查以下情况
希望有帮助。在
相关问题 更多 >
编程相关推荐