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

标签 python file pandas dataframe

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

相关文章:

python - 更改数据框中多个位置的最快方法

python - 仅将 1 列拆分为 2,但保留其他 pandas python

python - 如何在python中重复列表中的数字?

python - 使用 Python 对交叉路口街道进行地理编码

python - 将时间转换为python中的天数

python - Plon 未启动 ValueError : unknown locale: UTF-8

json - 有没有办法使用 jq 通过其公共(public)键拆分 JSON 文件?

java - Swig:如何将 "FILE"类型从 C++ 传递到 Java

c++ - 处理记录最后 1000 个事件的文件操作的最佳方法

python - Panel4d 和 PanelND 对象可以保存吗?