如何获取文本文件中行的长度?现有代码匹配遗漏问题求助
问题解答:为什么长度为5的行未被匹配?
问题背景
你希望获取文本文件中行的长度(而非行号),现有代码如下:
line = initDict.readline() while line: line = initDict.readline() print(line) if len(line) == 5: # <<< problem line = initDict.readline() transfer.append(line)
输入内容:
1 22 33335 4444 55555
实际输出仅匹配到最后一行55555,疑问:为什么长度为5的33335(第3行)没有被匹配到?
问题原因
1. 换行符的隐藏影响
readline()方法读取的内容包含行尾的换行符\n(除了文件的最后一行可能没有)。比如你看到的33335,实际读取后是字符串"33335\n",长度为6,自然不会触发len(line) == 5的判断;而最后一行55555作为文件末尾行,没有换行符,长度刚好是5,所以被匹配到。
2. 读取逻辑的混乱
你的代码存在多次无意义的readline()调用:
- 初始读取第一行后,循环开头又调用
readline(),直接跳过了第一行内容; - 当匹配到长度符合条件的行时,又额外调用一次
readline(),把下一行的内容加入列表,完全偏离了“收集长度为5的行”的需求。
修正后的代码
如果要收集内容长度为5的行(不包含换行符),可以用更简洁的循环方式处理:
transfer = [] # 直接遍历文件对象,逐行读取 for line in initDict: # 移除行尾的换行符(保留其他空白字符可改用strip()) content = line.rstrip('\n') if len(content) == 5: transfer.append(content) print(content)
运行这段代码后,33335和55555都会被匹配到并加入transfer列表。
内容的提问来源于stack exchange,提问作者user20423495
相关产品推荐
相关产品推荐

