Сортировка предложений текстового файла по пользовательскому вводу - PullRequest
0 голосов
/ 06 февраля 2020

Мой код сортирует предложения файла по длине предложений по их длине и сохраняет в новый файл.

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

Пример: пользовательские вводы 50 - программа отсортирует все предложения, длина которых превышает 50 или если пользователь введет all, то программа отсортирует все строки как обычно.

Мой код:

file = open("testing_for_tools.txt", "r")
lines_ = file.readlines()
#print(lines_)
user_input = input("enter")
if user_input is int:
    lines = sorted(lines_, key=len)
else:
    lines = sorted(lines_, key=len)
# lines.sort()
file_out = open('testing_for_tools_sorted.txt', 'w')
file_out.write(''.join(lines))  # Write a sequence of strings to a file
file_out.close()
file.close()
print(lines)

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

@ Черный снег Мне больше нечего ответить, если он работает, как ожидалось. Это довольно длинный ответ:

idx_to_sort = [True if len(i)>int(user_input) else False for i in lines_]
idx_to_sort

lines_to_sort = []
for i in range(len(idx_to_sort)):
    if idx_to_sort[i]:
        lines_to_sort.append(lines_[i])

lines_to_sort

lines = sorted(lines_to_sort, key=len)
lines

counter=0
for i in range(len(idx_to_sort)):
    if idx_to_sort[i]:
        lines_[i] = lines[counter]
        counter += 1
lines_

Результат будет другим, но не таким, как вы ожидали.

1 голос
/ 06 февраля 2020
  • input возвращает строку, всегда, если вам нужно целое число или что-то такое, что вам нужно явно проанализировать, вы никогда не получите целое число из input.
  • is не примитив тестирования типов в python, это примитив . Он проверяет, являются ли левый и правый объекты одним и тем же объектом, и это it .
  • filter - это то, что вы ищете здесь, или понимание списка : если пользователь предоставил входные данные и , то этот вход является допустимым целым числом, вы хотите отфильтровать строки только до тех, которые превышают указанную длину. Это отдельный шаг от сортировки.

Кроме того,

  • вы должны использовать with для управления файлами, если нет особых c причин, по которым вы можете использовать ' t или не могут
  • файлы имеют метод writelines, который должен быть более эффективным, чем запись объединенных строк
  • никогда когда-либо открывать файлы в текстовом режиме без предоставления кодировки в противном случае Python запрашивает у системы кодировку, и эта система может быть неправильно настроена или странно настроена, что приведет к вводу мусора
with open("testing_for_tools.txt", "r", encoding='utf-8') as f:
    lines_ = file.readlines()

#print(lines_)
user_input = input("enter")
if user_input:
    try:
        limit = int(user_input.strip())
    except ValueError:
        pass
    else:
        lines_ = (l for l in lines_ if len(l) >= limit)

lines = sorted(lines_, key=len)
with open('testing_for_tools_sorted.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)
print(lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...