python - 程序无法通过 write 方法
问题描述
这是我的代码:
with open('exr.txt','r+') as exr:
while True:
exr.write((input('enter your name ')+'\n'))
b=exr.readlines()
if 'q' in b:
break
print('names entered:')
for c in b:
print('-',c)
它永远不会通过 write() 方法,即使在输入“q”后也会不断提示我输入名称,感谢任何帮助
解决方案
您的方法存在(至少)三个问题:
- 似乎
exr.readlines()
在这里没有按您的预期工作r+
,因此"q"
未读取在当前“会话”中输入的 - 与此相反,读取前一个会话中
"q"
输入的 a ,因为它们保留在名称文件中,即循环在以后的任何执行中立即中断 - 您正在测试是否
"q"
是 inb
,但是您将 a 附加\n
到每个输入,并readlines
包含那些行尾字符,因此b
只能包含"q\n"
似乎读取和写入都使用文件中的相同位置。您可以使用 获取位置exr.tell()
并使用 设置它exr.seek(x)
。这样,您可以看到:
- 在循环的开头
exr.tell()
,即位置在0
,这意味着您的第一个write
将覆盖文件开头的任何数据 - 之后
write
,位置为k+1
带有k
字母的名称和附加的\n
- 现在从该位置(即在您刚刚输入的名称之后)
readlines
读取所有数据直到文件末尾 - 现在,文件位置在末尾,所有后续
write
调用都会将名称附加到文件末尾,将文件位置进一步推进到新的末尾,并且readlines
不会读取任何内容,因为指针已经在文件末尾
您可以使用exr.seek(0)
将文件中的位置重置为开头(或最后一行之前的任何其他位置),但是虽然这(与 3. 一起)解决了直接问题,但您仍然不应该这样做。
相反,只需将输入存储在一个变量中,并在将其添加到文件或中断循环之前检查该变量的值。
with open('exr.txt', 'a') as exr:
while True:
name = input('enter your name ')
if name == "q":
break
else:
exr.write(name + '\n')
推荐阅读
- html - Bootstrap Carousel - 将下一个和上一个按钮放在右上角并彼此靠近
- algorithm - 有效计算给定时间范围内的独立事件
- python - 如何获得熊猫 pct_change 的百分比结果?
- flutter - vscode中flutterapp中未验证的断点。我该如何克服这个问题?
- python - C# -> Python 编码和解码网络摄像头流
- javascript - 我如何让我的供应商(关联帐户)在我们加入他们后进入条纹支付页面?
- python - Python/Pyspark:从地址栏中删除邮政编码
- python - 从远程服务器问题的 VSCode 绘图:qt.qpa.xcb:无法连接到显示器
- mariadb-10.4 - 没有索引提示的 MariaDB MAX_JOIN_SIZE 错误
- arrays - 在 Lua 中复制表值正在更改原始值