按用户输入对文本文件的句子进行排序
Sorting sentences of text file by users input
我的代码是根据句子的长度对文件中的句子进行排序,然后保存到新文件中。
我如何更改我的代码,以便如果用户在程序启动时输入任何数字,我们将根据该输入过滤行。
示例:用户输入 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)
- 输入returns一个字符串,总是,如果你想要一个整数或一些你需要明确解析它的东西,你永远不会从
input
. 中得到一个整数
is
不是 python 中的类型测试原语,它是 identity 原语。它检查左右是否是同一个对象,那就是 it.
filter
是您在此处查找的内容,或 列表理解:如果用户提供了输入 and 如果输入是有效整数,则您希望将行过滤为仅超过指定长度的行。这是独立于排序的步骤。
除此之外,
- 您应该使用
with
来管理文件,除非有特定原因您不能或不能
- 文件有一个
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)
@黑雪
如果它按预期工作,我没有什么可以回答的。
这是一个相当长的答案:
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_
输出会有所不同,但与您预期的不同。
我的代码是根据句子的长度对文件中的句子进行排序,然后保存到新文件中。
我如何更改我的代码,以便如果用户在程序启动时输入任何数字,我们将根据该输入过滤行。
示例:用户输入 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)
- 输入returns一个字符串,总是,如果你想要一个整数或一些你需要明确解析它的东西,你永远不会从
input
. 中得到一个整数
is
不是 python 中的类型测试原语,它是 identity 原语。它检查左右是否是同一个对象,那就是 it.filter
是您在此处查找的内容,或 列表理解:如果用户提供了输入 and 如果输入是有效整数,则您希望将行过滤为仅超过指定长度的行。这是独立于排序的步骤。
除此之外,
- 您应该使用
with
来管理文件,除非有特定原因您不能或不能 - 文件有一个
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)
@黑雪 如果它按预期工作,我没有什么可以回答的。 这是一个相当长的答案:
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_
输出会有所不同,但与您预期的不同。