【问题标题】:Unexpected result when trying to open CSV file with Python3 using VS Code尝试使用 VS Code 使用 Python3 打开 CSV 文件时出现意外结果
【发布时间】:2021-03-11 20:58:05
【问题描述】:

我正在尝试使用with open 使用 Python(Python 3.9.0,在 VS Code,MacOS 中)打开一个 csv 文件。我的基本代码如下:

import csv
import os

file_to_load = os.path.join("resources","original_file.csv")
with open(file_to_load) as starting_numbers:
    print(starting_numbers)

我得到的结果是:

<_io.TextIOWrapper name='resources/original_file.csv' mode='r' encoding='UTF-8'>

我预期的结果是:

<open file 'Resources/original_file.csv', mode 'r' at 0x[memory address]>

我从四年前遇到this question,但它似乎与我的问题没有直接关系。我目前没有尝试获取文件的完整读数,只是内存分配。

【问题讨论】:

    标签: python python-3.x csv visual-studio-code python-import


    【解决方案1】:

    &lt;open file ...&gt; 是打开文件的 python 2 字符串表示形式。在 python 3 中,文件管理被分解成层来实现不同的功能。文本包装器会将文件的字节解码为完全启用 unicode 的 python 3 字符串,而二进制文件只需要一个阅读器。请参阅openText I/O

    >>> open('test.py')
    <_io.TextIOWrapper name='a.py' mode='r' encoding='UTF-8'>
    >>> open('test.py', 'rb')
    <_io.BufferedReader name='a.py'>
    

    在文本模式下打开文件时,TextIOWrapper 会在二进制文件BufferedReader 上分层

    >>> f = open('test.py')
    >>> f.buffer
    <_io.BufferedReader name='test.py'>
    

    为 python 2 编写的旧示例不一定提到它们是 python 2,您可能需要“阅读茶叶”才能弄清楚。一个看起来像 &lt;open file ...&gt; 的文件对象是一个死的赠品。

    【讨论】:

    • 我从您的回答中了解到,我的代码本身并没有错,只是我所期望的。预期的结果是我在 Python 2 下会收到的结果。
    • 对。你看到的对于 python 3 来说是正常的。
    • 但是以“rt”模式打开文件不是更好吗?明确地将其作为文本文件打开?或者这是否意味着文本现在是默认值?
    • 我的意思是添加文档引用,我会把它们放进去。“t”现在是默认值(这意味着它根本不需要),而您使用“b”来做二进制。事实上,默认是读取文本,所以你甚至不需要“r”,除非你使用其他修饰符,比如“b”或“+”。
    • 至于明确,我遵循的一个反论点是人们应该总是知道默认值(如果他们不确定,应该有一个方便的文档字符串)所以你不应该参数化一些东西,除非它与默认值不同。看到open('foo". "r") 让我的大脑不得不思考,等一下……为什么不只是默认?
    猜你喜欢
    • 2011-08-17
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2013-09-24
    相关资源
    最近更新 更多