将 DataFrame 写入类 '_io.BufferedWriter'

问题描述 投票:0回答:1

我使用 parser.argparser 类来解析脚本中的命令行参数。它很方便,因为它会自动检查作为命令参数传递的文件名的文件存在、权限等,并在出现问题时立即引发异常。它还可以处理“-”约定来打开标准输入/标准输出流。最终它返回一个随时可用的文件对象:

CommonArguments.add_argument('-o',  '--output',         type=argparse.FileType('wb'),   required=True,  help='Output file name')
print("Object type:", type(parser.parse_args().output))
-------
Object type: <class '_io.BufferedWriter'>

如果我想使用内置函数从文件中读取和写入,它效果很好。但是,由于我在 DataFrame 中处理数据,因此将对象传递给 DataFrame 方法来保存文件或从中读取文件会很方便。不幸的是, df.to_excel() 方法需要一个文件名并自行处理所有文件 IO,所以我最终使用:

df.to_excel(parser.parse_args().output.name, index=False)

是否有可能让两个库以更精简的方式协同工作?我实际上需要做的是从 DataFrame 中收集 excel 格式的数据并将其转储到 BufferedWriter 对象进行写入。我有点担心使用两个不同的对象访问同一文件。

输入也是如此:我想从 BufferedReader 收集数据(如果我传递“-”作为文件名,则可能是 STDIN),并从中创建一个数据帧,类似于:

df = pd.read_html(source_object)

不幸的是,我无法让 pd.read_html 从 stdin 读取。

有可能吗?

或者我错过了什么,有更好的解决方案吗?

python python-3.x pandas dataframe argparse
1个回答
0
投票

FileType
是作为获取输入/输出文件的脚本的便捷工具而编写的。随着向 Py3 的过渡,它并没有很好地老化。

几年前,我为一个错误/问题编写了一个补丁,想要相当于一个

with context
,一个会自动关闭自身的文件对象。投入生产的工作量太大了。

我认为只接受一个文件名,然后用

open
pandas open
自己做会更好。

但如果您仍然想要错误检查的好处,自定义

type
函数可能是最佳选择。写起来应该不难。 –

© www.soinside.com 2019 - 2024. All rights reserved.