读取文件,Python

2024-09-29 23:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么输出不同。这一点是相同的。为什么通过变量指定数据量会产生这样的结果? 谢谢你的关注

with open('/Users/tt/Desktop/words.py', 'r') as readings:
readings.read(10)
print(readings)

'I do know!'
<_io.TextIOWrapper name='/Users/tt/Desktop/words.py' mode='r' encoding='UTF-8'>

with open('/Users/tt/Desktop/words.py', 'r') as readings:
tensymbols = readings.read(10)
print(tensymbols)

I do know!

Tags: pyreadaswithopendouserswords
3条回答

这看起来像是从Python的REPL(即>>>交互式提示符)以父级方式运行它

第一次尝试返回作为Python字符串读取的字符串(带引号)。然后要求Python print打开文件句柄,因为文件句柄没有合理的字符串表示形式,所以P Ython打印其repr()字符串

第二次尝试只是要求Python print字符串;因为这是一个字符串,不必为了产生一个人类可读的表示而被破坏,所以它是逐字打印的

输出不同,因为读数是类型为“_io.TextIOWrapper”的对象。所以当你打印读数时,你实际上是在打印一个对象

但是,当您将其分配给变量时,它将转换为字符串。因此,您打印的是字符串而不是对象

因此,两种情况下的输出都不同

它有助于发布您的实际shell会话,以便我们可以可视化正在发生的事情。如果只是将其作为python脚本运行,我们将永远不会看到第一个“我确实知道!”,因为它将被丢弃,因为它没有分配给变量

在第一种情况下,读取并丢弃文件的前10个字符。事实证明,如果函数调用不是None,pythonshell和大多数IDE将显示函数调用的结果,这就是您在屏幕上看到的结果

>>> with open('words.py') as readings:
...     readings.read(10)
... 
'I do know!'
>>> print(readings)
<_io.TextIOWrapper name='words.py' mode='r' encoding='UTF-8'>

由于您没有分配readings.read(10)的结果,因此它将被丢弃……除非shell首先向您显示它

在第二种情况下,保留返回的字符串,以后可以使用它

>>> with open('words.py') as readings:
...     tensymbols = readings.read(10)
... 
>>> print(tensymbols)
I do know!
>>> print(readings)
<_io.TextIOWrapper name='words.py' mode='r' encoding='UTF-8'>
>>> 

请注意,如果您第一次打印readings,它就像第一次一样是一个io包装器

相关问题 更多 >

    热门问题