我开始阅读 Elegant SciPy由 Nunez-Iglesias 等人撰写。 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)
最佳答案
您可以将文件句柄传递给 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 无法打开文件本身。例如,如果它使用不常见的压缩算法进行压缩。
关于python - 使用 pd.read_csv 打开 CSV 文件 - 上下文管理器的任何目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282010/