我开始阅读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)
答案 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无法打开文件本身时。例如,如果它是使用不常见的压缩算法压缩的。