所以我目前正在研究文本文件中的分数及其相应的名称。此代码以数字方式对代码进行排序,但也打印出\ t和\ n。我是初学者,我几乎无法绕过.strip和item.rsplit。
我没有在文件中创建空格,而是在新行上添加新输入。我想让它看起来像名字和分数在列中分开,这是正确的吗?是否有一种更简单的方法来分离2并能够以数字方式对分数进行排序?
非常感谢任何帮助。
double[]
答案 0 :(得分:0)
这样的东西?
name = input('What is your name?: ')
score = input ('What is your score?: ')
with open("newfile.txt", "a") as f:
f.write (name+'\t'+score+'\n')
sorting = ('How would you like to sort the scores?: \n\
1. Ascending \n')
sortchoice = int(input(sorting))
if sortchoice ==1:
with open("newfile.txt", 'r') as f:
data = [i.strip() for i in f if i.strip() != '']
sorted_data = sorted(data, key=lambda x: int(x.split('\t')[1]))
for i in sorted_data:
print(i)
首先,
data = [i.strip() for i in f if i.strip() != '']
返回类似
的内容['Foo\t23', 'Bar\t33', 'Baz\t10', 'foo\t222', 'bar\t11111', 'qwe\t0001']
如您所见,这些是文件内容,由\t
分割。所以我们正在使用:
sorted_data = sorted(data, key=lambda x: int(x.split('\t')[1]))
x.split('\t')
提供类似['Foo', '23']
的内容,然后我们使用切片[1]
来获取'23'
。
最后,使用int('23')
作为排序键。
答案 1 :(得分:0)
创建strip()
之后,您可以\n
选项卡字符split()
上的新行\t
和sorted_data
,然后使用" ".join()
将拆分字符串重新连接在一起,由空格字符分隔。然后你可以再打印一次:
with open("newfile.txt", "r") as f:
sorted_data = sorted(f.readlines(), key=lambda item: int(item.strip().split("\t")[-1]))
sort = [" ".join(line.strip().split("\t")) for line in sorted_data]
print(sorted)
使用一些非常随机的数据,打印出来:
['ki 332', 'kokp 2112', 'ko 2121']
当然,这只是print()
打印list
的结果,而不是它的内容。因此,它无法使用它\t
和\n
格式化打印文本。
您可以轻松打印输入 的每一行
with open("newfile.txt", "r") as f:
sorted_data = sorted(f.readlines(), key=lambda item: int(item.strip().split("\t")[-1]))
# No need for extra splitting and stripping now.
# sort = [" ".join(line.strip().split("\t")) for line in sorted_data]
for line in sorted_data:
print(line)
现在打印:
ki 332
kokp 2112
ko 2121
此外,这里的括号:
a=(name)
b=(score)
实际上没有实际意义,你可以a = name
和b = score
具有相同的效果。