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

时间:2017-09-18 14:36:27

标签: python file pandas dataframe

我开始阅读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

但我认为read_csv将关闭文件,因为它是在给定文件描述符的情况下打开的(参见Andy Hayden's answer here)。

这里有上下文管理器的任何目的,还是我们可以安全地编写

filename = 'data/counts.txt'
data_table = pd.read_csv(filename, index_col=0) 

1 个答案:

答案 0 :(得分:2)

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

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

data_table = pd.read_csv(filename, index_col=0) 

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

>>> 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

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