在python 3.7的标题下打印排序的数据

时间:2018-12-03 15:49:07

标签: python-3.x

我想对具有以下格式的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完全没有经验,我将不胜感激。
非常感谢。

1 个答案:

答案 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

对此的好处是,您不必编写复杂的代码来解析文件。

让我知道这是否有帮助。