我想对具有以下格式的txt文件中的数据进行排序:
name number1 number2 number3 number4
nick 3 2 66 40
Anna 3 1 33 19
kathrine 4 4 100 258
基于第四列(number3),但是当number3是三位数时似乎无效。
该程序仅询问三遍名字。每个名称输入的数字不是0
并显示名称,给定的数字(number1),大于10的数字(number2),百分比(数字3)以及给定的所有数字的总和(number4)。
我也想打印每个标题下对齐的数据。不需要存储标题
在文件中。
代码如下
def how_to_sort_a_file():
from operator import itemgetter
with open('myfile2.txt') as f:
lines = [line.split(' ') for line in f]
output = open('myfile2(sorted).txt', 'w')
for line in sorted(lines,key=itemgetter(3), reverse=True):
output.write(' '.join(line))
output.close()
print('')
with open('myfile2(sorted).txt') as f:
##prints an empty line between lines
for line in f:
print(line)
##end function
##################################################################
##################
## main program ##
##################
file=open('myfile2.txt', 'w')
file.close()
for i in range(3):
name=input('insert your name: ')
number=int(input('insert number, 0 to terminate: '))
given_numbers=0
numbers_greater_10=0
Sum=0
while number!=0:
Sum=Sum+number
given_numbers=given_numbers+1
if number>10:
numbers_greater_10=numbers_greater_10+1
number=int(input('insert number, 0 to terminate: '))
percentage=int((numbers_greater_10)*100/given_numbers)
with open('myfile2.txt', 'a') as saveFile:
saveFile.write(name +' '+str(given_numbers)+' '+str(numbers_greater_10)+' '+ str(percentage)+' '+ str(Sum)+"\n")
how_to_sort_a_file()
我对Python完全没有经验,我将不胜感激。
非常感谢。
答案 0 :(得分:0)
您可以尝试使用python的库pandas进行此操作:
将文本文件读取到如下所示的数据框中:
In [1397]: df = pd.read_fwf('myfile2.txt')
In [1398]: df
Out[1398]:
name number1 number2 number3 number4
0 nick 3 2 66 40
1 Anna 3 1 33 19
2 kathrine 4 4 100 258
现在,您可以按升序对number3
列进行简单排序:
In [1401]: df = df.sort_values('number3')
In [1402]: df
Out[1402]:
name number1 number2 number3 number4
1 Anna 3 1 33 19
0 nick 3 2 66 40
2 kathrine 4 4 100 258
您可以在上方看到这些行按number3
排序。现在,只需将其写入文本文件即可:
In [1403]: df.to_csv('my_output.txt', index=False)
mayankp@mayank:~/Desktop$ cat my_output.txt
name,number1,number2,number3,number4
Anna,3,1,33,19
nick,3,2,66,40
kathrine,4,4,100,258
对此的好处是,您不必编写复杂的代码来解析文件。
让我知道这是否有帮助。