使用 pkg_resources 时以通用换行模式打开文件?
我正在处理 CSV 文件并具有以下工作代码:
reader = csv.reader(open(filename, 'rU'), dialect='excel')
header = reader.next()
但是,为了与代码库中的其他位置兼容,我需要使用 pkg_resources.resource_stream
来使用文件对象,如下所示:(
fileobj = pkg_resources.resource_stream('foo', 'tests/bar.csv')
reader = csv.reader(fileobj, dialect='excel')
header = reader.next()
我是此处简化 - 基本上 csv.reader
代码位于我无法控制的函数中,并且它需要一个 fileobj
。)
这会引发以下错误。
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
知道如何在我的 fileobj
中使用通用换行模式吗?我在 pkg_resources
文档中看不到任何有关此内容的信息。
谢谢。
I am processing a CSV file and have the following working code:
reader = csv.reader(open(filename, 'rU'), dialect='excel')
header = reader.next()
However, to be compatible with elsewhere in the codebase, I need to use a file object using pkg_resources.resource_stream
, as follows:
fileobj = pkg_resources.resource_stream('foo', 'tests/bar.csv')
reader = csv.reader(fileobj, dialect='excel')
header = reader.next()
(I'm simplifying here - basically the csv.reader
code is in a function over which I don't have control, and it expects a fileobj
.)
This throws the following error.
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
Any idea how I can use universal-newline mode with my fileobj
? I can't see anything about this in the pkg_resources
documentation.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果流总是有一个fd(例如,因为它是文件系统上正常打开的文件),则可以使用 os.fdopen(fileobj.fileno(), 'rU') 来使用正确的方式打开它模式。
If the stream always has an fd (e.g. because it's a normal opened file on the filesystem), you can use
os.fdopen(fileobj.fileno(), 'rU')
to open it with the right mode.