📜  门| GATE-CS-2002 |问题6(1)

📅  最后修改于: 2023-12-03 15:12:40.007000             🧑  作者: Mango

问题描述

该题目是针对计算机科学及相关领域的同学设计的一道综合性问题,题目要求根据给出的输入,设计程序实现以下功能:

  1. 读取一个包含若干行数据的文件;
  2. 对每一行数据,提取出符合规则的字段;
  3. 对提取出的字段进行排序;
  4. 将排序后的结果按规则输出到文件。
解题思路

该问题可以从以下几个方面入手:

读取文件

使用Python的内置函数open()来读取文件,可以使用下面的代码:

with open(filename, 'r') as f:
    for line in f:
        # 解析每行数据

这里的filename是文件名,'r'表示以只读方式打开文件。由于with语句可以自动管理资源,因此不需要手动关闭文件。

解析每行数据

该问题中需要从每行数据中提取出符合规则的字段,可以使用正则表达式来实现。

import re

pattern = re.compile(r'(?P<name>[a-zA-Z]+)\s(?P<score>\d+)')
match = pattern.match(line.strip())
if match:
    name = match.group('name')
    score = int(match.group('score'))

这里使用了Python的re模块来创建正则表达式,然后使用match()方法匹配每行数据。如果匹配成功,就可以使用group()方法提取出相应的字段。

排序

在Python中,可以使用sorted()方法来对列表进行排序。sorted()方法的第一个参数是需要排序的列表,第二个参数是一个可选参数,用来指定排序规则。例如,如果要对一个列表按照元素的第二个属性进行排序,可以按照下面的方式来调用sorted()方法:

sorted(list, key=lambda x: x[1])

这里使用了Python的函数式编程特性,使用lambda表达式来定义一个匿名函数,用来指定排序规则。

输出到文件

使用Python的内置函数open()来写入文件,可以使用下面的代码:

with open(filename, 'w') as f:
    for item in list:
        f.write(str(item) + '\n')

这里的filename是文件名,'w'表示以只写方式打开文件。使用write()方法来向文件中写入数据,需要注意的是,write()方法需要将数据转换为字符串格式。

总结

通过以上的分析,我们可以设计出一个较为完善的解决方案。

import re

def parse_line(line):
    pattern = re.compile(r'(?P<name>[a-zA-Z]+)\s(?P<score>\d+)')
    match = pattern.match(line.strip())
    if match:
        name = match.group('name')
        score = int(match.group('score'))
        return (name, score)

def main(input_file, output_file):
    data = []
    with open(input_file, 'r') as f:
        for line in f:
            item = parse_line(line)
            if item:
                data.append(item)
    sorted_data = sorted(data, key=lambda x: (x[1], x[0]))
    with open(output_file, 'w') as f:
        for item in sorted_data:
            f.write('{} {}\n'.format(item[0], item[1]))

if __name__ == '__main__':
    main('input.txt', 'output.txt')

这里定义了一个parse_line()函数,用来解析每行数据。然后使用main()函数来读取文件、解析数据、排序、输出到文件的整个过程。