2

我有一个文件,每一行都像

名称1 名称2 名称3

我可以逐行读取它,分割每一行,处理该行并逐行输出处理后的内容。

但是我想读入整个文件,按中间列排序,然后以与输入相同的格式输出整个排序文件。

我的第一次尝试是在读入每行时拆分每一行以创建一个元组列表,然后使用 key= 进行排序,然后重新加入每个元组并逐行输出。

有没有更蟒蛇的方式来做到这一点?

4

1 回答 1

4

应该这样做:

with open('datafile') as fin:
    lines = list(fin)
    lines.sort(key=lambda line: line.split()[1])

with open('outfile','w') as fout:
    fout.writelines(lines)

几点注意事项:

  • 我的排序键有点难看。但是,这里的优点是它保留了与输入文件中的行完全相同的行。如果我们拆分行然后排序,代码可能会更漂亮一些,但我们需要在输出时正确连接拆分行(另外,可能会丢失运行的空白)

  • outfile 可以是与 datafile 相同的文件名,以有效地“就地”进行更改

  • 如果您需要支持引用字段 ( field1 "field 2" field3),那么您需要查看该csv模块。

于 2013-07-24T06:42:01.657 回答