Открыть файл в режиме универсальной новой строки при использовании pkg_resources? - PullRequest
3 голосов
/ 29 октября 2010

Я обрабатываю файл 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 голосов
/ 29 октября 2010

Если у потока всегда есть fd (например, потому что это обычный открытый файл в файловой системе), вы можете использовать os.fdopen(fileobj.fileno(), 'rU'), чтобы открыть его в правильном режиме.

...