使用 pd.read_csv 打开 CSV 文件 - 上下文管理器有何用途?

Eri*_*sen 5 python file dataframe pandas

我开始阅读Nunez-Iglesias 等人写的《Elegant SciPy》。al,当打开书中的第一个数据集(文件.txt)时,作者使用

filename = 'data/counts.txt'
with open(filename, 'rt') as f:
    data_table = pd.read_csv(f, index_col=0) # Parse file with pandas
Run Code Online (Sandbox Code Playgroud)

但我认为这read_csv会关闭文件,因为它是在给定文件描述符的情况下打开的(请参阅Andy Hayden 的回答此处)。

那么这里的上下文管理器有什么目的吗,或者我们可以安全地编写

filename = 'data/counts.txt'
data_table = pd.read_csv(filename, index_col=0) 
Run Code Online (Sandbox Code Playgroud)

MSe*_*ert 5

您可以传递文件句柄read_csv或传入文件名。在第一种情况下,您创建文件句柄,因此您有责任再次关闭它。但是,如果您传入文件,那么read_csv将代表您打开该文件并再次关闭它(在适当的时候)。

因此,在大多数情况下,仅提供文件名是更简单的选择:

data_table = pd.read_csv(filename, index_col=0) 
Run Code Online (Sandbox Code Playgroud)

请注意,传递文件句柄的选项允许您传递类似文件的对象:

>>> from io import StringIO
>>> import pandas as pd
>>> myio = StringIO("""a b c
... 0 1 2 3
... 1 4 5 6""")
>>> pd.read_csv(myio, sep=' ', header=0, index_col=0)
   a  b  c
0  1  2  3
1  4  5  6
Run Code Online (Sandbox Code Playgroud)

然而,真正将真实的文件句柄传递给read_csv. 我能想到的唯一情况是 pandas 无法打开文件本身。例如,如果使用不常见的压缩算法对其进行压缩。