Python думает, что текстовый файл с 3000 строками является одной строкой долго?

У меня есть очень длинный текстовый файл, что я пытаюсь обработать использование Python.

Однако следующий код:

for line in open('textbase.txt', 'r'):
    print 'hello world'

производит только следующий вывод:

hello world

Это - как будто Python думает, что файл является только одной строкой долго, хотя это - много тысяч строк долго при просмотре в текстовом редакторе. Исследование его на командной строке с помощью команды файла дает:

$ file textbase.txt
textbase.txt: Big-endian UTF-16 Unicode English text, with CR line terminators

Что-то не так? Я должен изменить разделители строки?

11
задан Josh Lee 2 February 2010 в 14:37
поделиться

4 ответа

Необходимо задать значение upload _ max _ filesize и post _ max _ size в файле php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

После изменения файлов php.ini необходимо перезапустить сервер HTTP для использования новой конфигурации.

Если вы не можете изменить свой php.ini, вам не повезло. Эти значения нельзя изменить во время выполнения; загрузка файла, размер которого превышает значение, указанное в файле php.ini, не будет выполнена к моменту выполнения вызова ini _ set .

См. Описание основных директив php.ini .

-121--1799300-

Если вы немедленно уйдете, запрос будет отклонен. Вам нужно будет включить логику на сервере, чтобы сохранить любой процесс, который был запущен запросом jquery ajax.

Например, в PHP существует функция ignore _ user _ abort () , которая при значении true будет продолжать процесс даже после того, как пользователь прервал запрос.

-121--4998268-

Вероятно, вы найдете, что это «с терминаторами линии CR», который дает игру. Если вы работаете на платформе, которая использует newlines в качестве терминаторов линий, то будет видеть ваш файл как одну большую линию honkin '.

Измените входной файл таким образом, чтобы в нем использовались правильные терминаторы строки. Ваш редактор, вероятно, более простителен, чем ваша реализация Python.

Окончания линии CR, насколько мне известно, являются вещью Mac, и вы можете использовать модификатор режима U , чтобы открыть для автоматического обнаружения на основе первого найденного терминатора строки.

6
ответ дан 3 December 2019 в 02:40
поделиться

open () возвращает объект файла. Вам необходимо использовать:

for line in open('textbase.txt', 'r').readlines():
    print line
-1
ответ дан 3 December 2019 в 02:40
поделиться

Согласно документации для open(), вы должны добавить U в режим:

open('textbase.txt', 'Ur')

Это позволяет "универсальные новые строки ", что нормализует их к \n в строках, которые он вам дает.

Однако, правильнее всего декодировать UTF-16BE в Unicode объекты сначала , перед переводом новых строк. В противном случае случайно 0x0d байт может ошибочно превратиться в 0x0a, в результате чего

ЮникодDecodeError: 'utf16' кодек не сможет декодировать байт 0x0a в позиции 12: усеченных данных.

Python's кодеки модуль поставляет функцию open, которая может одновременно декодировать Юникод и обрабатывать новые строки:

import codecs
for line in codecs.open('textbase.txt', 'Ur', 'utf-16be'):
    ...

Если в файле есть метка порядка байт (BOM) и вы указываете 'utf-16', то он обнаруживает эндианность и скрывает для вас BOM. Если это не так (так как BOM является необязательным), то этот декодер будет просто продолжать использовать эндианность вашей системы, что, вероятно, будет не очень хорошо.

Указание эндианности самостоятельно (с помощью 'utf-16be') не будет скрывать BOM, так что вы можете захотеть использовать этот хак:

import codecs
firstline = True
for line in codecs.open('textbase.txt', 'Ur', 'utf-16be'):
    if firstline:
        firstline = False
        line = line.lstrip(u'\ufeff')

Смотрите также: Python Unicode HOWTO

25
ответ дан 3 December 2019 в 02:40
поделиться

похоже, что в вашем файле строки заканчиваются только на CR, и Python, вероятно, ожидает LF или CRLF. Попробуйте использовать 'universal newline':

for line in open('textbase.txt', 'rU'):
    print 'hello world'

http://docs.python.org/library/functions.html?highlight=open#open

1
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: