чтение слов из файла в набор, поддержание порядка

1

вот массив слов Юникода, используемых в python script.

texts =[u"abc", u"pqr", u"mnp"]

script работает так, как ожидалось, с приведенным выше примером из трех слов. Проблема в том, что в текстовом файле есть тысячи слов. Как читать из текстового файла?

Update: У меня есть 2 вопроса. Последовательность слов из текстового файла не сохраняется на выходе. Текстовый файл имеет символы юникода и, следовательно, "u" в моем исходном примере.

# cat testfile.txt
Testing this file with Python

# cat test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

f     = open('testfile.txt', 'r')
texts  = set(f.read().split())
print (texts)

# python test.py
set(['this', 'Python', 'Testing', 'with', 'file'])
Теги:

2 ответа

2
Лучший ответ

Я не вижу проблем с кодом чтения файла. Учитывая, что слова появляются в файле, разделенном пробелом, и файл не слишком велик, чтобы его проглотили с помощью одного read, он должен работать нормально. Реальная проблема - это порядок слов, если вы вставляете их в set.

Если вам нужны слова в том же порядке, что и в файле, почему вы используете set? Просто сохраните их в списке.

Если вам нужно set удалить дубликаты и/или другие цели, то у вас есть следующие возможности:

  • Используйте стандартный класс OrderedDict в Python с версии 2.7, а рецепты существуют в Интернете для более ранних версий.
  • Создайте упорядоченный набор - здесь SO вопрос с хорошим обсуждением этого
  • 0
    >> Почему вы используете набор? Просто держите их в списке. # хороший вопрос. Благодарю.
2

Это потому, что как работает набор. Они не поддерживают порядок элементов, хранящихся в наборе.

Из документации:

Заданный объект представляет собой неупорядоченный набор отдельных хешируемых объектов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню