如何在使用pkg_resources时以通用换行模式打开文件?

3 投票
1 回答
2630 浏览
提问于 2025-04-16 06:17

我正在处理一个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 的文档里没找到相关信息。

谢谢。

1 个回答

6

如果这个流总是有一个文件描述符(比如说,它是一个正常打开的文件),你可以用 os.fdopen(fileobj.fileno(), 'rU') 这个方法来以正确的模式打开它。

撰写回答