(Python)如何根据字符对文本文件行进行排序?

时间:2015-03-23 16:06:55

标签: python sorting

我有一个文本文件,我在其中放置用户信息,如姓名,年龄等。文件必须按年龄排序。

我是怎么做到的?我有一行中的用户信息,用空格分隔的不同类型的信息,我制作了程序,以便年龄(例如)在3块中:如果年龄为5,则有2个空格然后串#" 5"。或者如果年龄是110,则没有空格,只有字符串" 110"。年龄是排在第一位的信息,所以我只需要按年龄排序。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

result = []

for line in open(fileName).readlines():
  line = line.strip()
  age = line[0:3] #This will get the first 3 characters of the line
  age = int(age)

  thisLine = {"age":age, "line":line}
  result.append(thisLine)

sortedList = sorted(result, key=lambda k: k["age"]) 

基本上你读过每一行

- 结束回车而不是

- 抓住3个三个字符(这将是你的年龄)

- 将这些转换为整数

- 将它们放入字典/ hashmap

-pop that into a array

- 通过hashmap的age属性对数组进行排序

希望这有帮助。

答案 1 :(得分:0)

这可以是修改后的HistogramSort的任务。如果允许随机访问写入,它将使用可变行长度(可选)。效率很高,可以处理大文件。它稳定地分类。

将120个整数计数器初始化为0。

逐行读取整个文件,获取年龄值和行长。

获取行长并将其添加到Age + 1的计数器中。

在第一次通过后,每个计数器都会告诉您给定年龄的所有行所需的空间(字符数)。

计算计数器的前缀和;这将告诉您给定年龄的行在排序时将从何处开始。最后一个计数器为您提供文件总大小。

然后在第二遍中,逐行读取,将每一行复制到新文件,它所属的位置(给定Age值)并更新相应的计数器。

[当人类的终生期望增加时,调整常数120。]