美文网首页
Python大杂烩4:按比例分割文件

Python大杂烩4:按比例分割文件

作者: 时间结余 | 来源:发表于2020-06-07 21:45 被阅读0次
    1.场景

    在很久很久以前,有一个马夫。
    他给国王喂养了10万匹马,有一本马匹花名册q4.txt。
    有一天,国王要求马夫把花名册随机分成2部分,分别交给2个人保管。
    第1 部分占20%,第2部分占80%。

    花名册

    我们来帮他实现。


    2.代码

    python版本:v3.7.3
    用法: python splitRoster.py q4.txt 10%

    #splitRoster.py
    #2020.03.23
    import sys
    import random
    
    def random_extract(in_file, out_file, number):
        #用列表解析一次性将文件所有内容读入,文件大于1GB时最好不要这么做
        #文件最好使用utf-8读取和写入
        in_lines = [line for line in open(in_file, "r", encoding="utf-8")]
    
        out_lines = []
        #循环number次,每次从所有数据中拿出1条放到out_lines
        for _ in range(int(number)):
            out_lines.append(in_lines.pop(random.randint(0, len(in_lines)-1)))
        #将out_lines排序并写入输出文件
        out_lines.sort()
        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]
        number = args[3]
    
        random_extract(in_file, out_file, number)
    

    3.讨论

    国王: 第13行中的下划线“_”是什么意思?
    作者:

    占位符,没有含义。可以写成for i in range(int(number)),但也用不到这个i,所以直接用个占位符就可以了。该行代码只需要循环number次就可以了。

    国王:抽取的数据中会有重复的吗
    作者:

    没有重复。第14行中的pop()方法会从list中拿出1条记录并从list中删除该条记录,改变了list本身。在每次进入循环时list都会少1条记录,保证了数据的不重复性。

    相关文章

      网友评论

          本文标题:Python大杂烩4:按比例分割文件

          本文链接:https://www.haomeiwen.com/subject/vpjbyhtx.html