Python大杂烩1:按照文件中第2列数字排序文本

1.场景

在很久很久以前,有一个乞丐。
他乞讨到这样一个文件q1.txt:

原始文件

他有强迫症,想按第2列从高到低排序,效果如a1.txt:

目标文件

我们来帮他实现。


2.代码

python版本:v3.7.3
用法: python sortText.py q1.txt a1.txt

#sortText.py
#2020.03.09
import sys

def sort_text(in_file, out_file):
    #用列表解析一次性将文件所有内容读入,文件大于1GB时最好不要这么做
    #文件最好使用utf-8读取和写入
    in_lines = [line for line in open(in_file, "r", encoding="utf-8")]
    #排序,按照key排序,key=第2列字符串,转化为int,reverse=True降序
    out_lines = sorted(in_lines, key=lambda line:(int(line.split("\t")[1])), reverse=True)
    #直接写入list
    with open(out_file, "w", encoding="utf-8") as fw:
        fw.writelines(out_lines)

if __name__ == "__main__":
    #从控制台cmd接收参数列表
    args = sys.argv
    in_file = args[1]
    out_file = args[2]
    
    sort_text(in_file, out_file)

3.讨论

乞丐: list.sort()sorted(list)有什么区别?
作者:

前者直接改变list本身,不会生成新的对象,返回值为None
举例:a = list.sort() ,则a=None
后者不会改变list本身,而是生成新的对象,需要有对象接收返回值
举例:b = list.sort(),则b是有值的

乞丐:lambda line:(int(line.split("\t")[1]))怎么理解?
作者:

lambda为匿名函数的标记
可以理解成这样一个函数:

def <lambda> (line):
   return int(line.split("\t")[1])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,537评论 0 13
  • 1. Python的hello-world: print ("Hello, Python!")、 完了 摇就完事儿...
    LunarShade阅读 1,564评论 0 0
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,787评论 0 5
  • 在Python中可以使用sorted函数对list进行排序,但是如果排序的对象是一个包含tuple的list时,s...
    溪奇阅读 20,911评论 0 2
  • 山有木兮木有枝, 君子爱妳知不知? 不羡妳飘柔的秀发, 不慕妳亭亭玉立的长腿; 不恋妳窈窕的身段, 只爱妳火热又宽...
    张春发_66a0阅读 365评论 4 4