python - 为什么函数“len()”返回的答案比实际字符串长 1 个字符?
问题描述
我创建了一个 Python 程序,如果它们不是一定长度,它会从列表中删除它们。我已经设置了一个for
循环,循环遍历我的列表并检查每个单词的长度是否为 3 或更大。我的代码如下:
import string
text_file = open("ten-thousand-english-words.txt", "r")
lines = text_file.readlines()
text_file.close()
open('SortedWords.txt', 'w').close()
for i in lines:
print(len(i))
if len(i) >= 4:
sortedFile = open("SortedWords.txt", "a") # append mode
sortedFile.write(i)
sortedFile.close()
我想创建一个新文件,如果它是 3 个字符或更长,则只复制单词。
出于某种原因,它会将列表中的所有单词读取为比实际长度长 1 个字符(例如,即使字母数为 5,单词“Hello”也会返回 6 的长度)。
我通过使其查找的长度为 4 而不是 3 来解决此问题,并且它工作正常。我在网上找不到有关此问题的任何信息,因此我决定发布此信息,以防有人知道为什么会发生这种情况。
解决方案
文件中的每一行末尾都有一个“\n”,表示换行符。我们不能用文本编辑器看到这个字符,因为文本编辑器会自动将其转换为新行,但请放心它就在那里。当您在 python 中使用 读取文件时readlines()
,会保留此“\n”字符。这就是为什么您的长度比预期的多 1 的原因。
这里有一些代码可以理解发生了什么:
somefile.txt
apple
banana
cow
script.py
with open("somefile.txt") as fi:
for line in fi.readlines():
print(repr(line))
>>> 'apple\n'
>>> 'banana\n'
>>> 'cow\n'
python 中的repr
函数将打印字符串的文字表示(即当它看到“\n”时它不会写换行符,它会按原样打印它)。如果我们在打印之前没有使用repr
,我们的输出将是:
apple
banana
cow
请注意,每个字符串之间都有额外的行,因为 python 正在打印 2 个换行符:1 来自字符串本身,1 是print
函数默认添加到末尾的。
为了摆脱换行符,我们可以使用my_string.strip()
,它将删除任何尾随或前导空格:
with open("somefile.txt") as fi:
for line in fi.readlines():
print(repr(line.strip()))
>>> 'apple'
>>> 'banana'
>>> 'cow'
推荐阅读
- python - 如何锁定一些行以在 Django 中插入?
- reactjs - 而不是从数组中删除项目,它被设置为未定义
- mysql - PHPMYADMIN | 我们如何在两个不同的 MySQL 数据库中同步两个表(在同一台服务器内)?
- vue.js - 路由器推送后 Nuxt 正在重新加载页面
- css - Bootstrap Dropdown 出现在其他元素的后面
- reactjs - 是什么导致错误:此代码中的重新渲染过多?
- sql - 执行以下 Oracle 查询时出错
- amazon-web-services - 将 docker Image 推送到 AWS ECR 时出现标记问题
- reactjs - 单击表单按钮时,Ant Design 表单元素未提交
- c++ - 在 C++ 中传递给 MPI 的结构