V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
AlisaDestiny
V2EX  ›  Python

Python 如何按照行来分割大文件。

  •  
  •   AlisaDestiny · Jan 1, 2017 · 7234 views
    This topic created in 3404 days ago, the information mentioned may be changed or developed.

    现在有一个文件有一百多万条数据,按行存储的。 100 多 M ,文本类型的。我想分割成小文件。每个文件 10000 行。想问下各位大神有没有解决办法。或者有代码就更好了。

    Supplement 1  ·  Jan 1, 2017
    感谢大家。问题成功解决了。我也成功进入了邻居家的路由器管理界面。哈哈哈。

    我说的大文件实际上是一个常用密码集合。少的密码文件 有 100 多 M 。多的文件有压缩包有 1G 多。

    最后,还是感谢大家。
    24 replies    2017-01-03 11:08:05 +08:00
    ipwx
        1
    ipwx  
       Jan 1, 2017
    100M 这个还需要问大神…… 老老实实地边读边写不就行了,时间都在 IO 上不在运算上, Python 绰绰有余。

    哦对了,最好是读写的两个文件在两块硬盘上,不然就很慢了。
    z657386160z
        2
    z657386160z  
       Jan 1, 2017 via iPhone
    split -l
    skydiver
        3
    skydiver  
       Jan 1, 2017
    这种事情还需要用 Python ?直接 coreutils 自带的命令 split -l 10000 就可以了。
    484A4B
        4
    484A4B  
       Jan 1, 2017
    如果不限定 Python 的话,用 shell 一行就够了
    AlisaDestiny
        6
    AlisaDestiny  
    OP
       Jan 1, 2017
    @ipwx
    如果把这一百多万行数据读到内存中用 split 分成一百多万行,我担心程序会崩~~

    @z657386160z
    @skydiver
    @484A4B
    哎。关键是是 window 系统。没有 split 命令。 QAQ
    AlisaDestiny
        7
    AlisaDestiny  
    OP
       Jan 1, 2017
    @ipwx thank you very much.
    Lpl
        8
    Lpl  
       Jan 1, 2017 via Android
    长春儿~?
    v23ex
        9
    v23ex  
       Jan 1, 2017 via iPhone
    先在本地测试
    Izual_Yang
        10
    Izual_Yang  
       Jan 1, 2017 via Android
    guyskk
        11
    guyskk  
       Jan 1, 2017 via Android
    100M 不大,全部读进内存没事的
    ericls
        12
    ericls  
       Jan 1, 2017 via iPhone
    @AlisaDestiny Python 不会全部读进内存吧……
    billlee
        13
    billlee  
       Jan 1, 2017
    你为什么要全部读进内存,一行行读不行吗?
    ryd994
        14
    ryd994  
       Jan 1, 2017 via Android
    莫不是 PHP 程序员?
    这么大的文件我担心程序会崩 233333

    用个 for 就搞定的事
    或者 head 配合 tail ,根本不需要 Python
    jyf007
        15
    jyf007  
       Jan 1, 2017 via Android
    split -l 10000
    什么 用 Python
    我不知道
    jyf007
        16
    jyf007  
       Jan 1, 2017 via Android
    @AlisaDestiny msys2 (滑稽)
    kankana
        17
    kankana  
       Jan 1, 2017
    @ryd994

    php 可以用 fopen, fgets, fclose 这些函数啊。不会整个读到内存的。。。
    AlisaDestiny
        18
    AlisaDestiny  
    OP
       Jan 1, 2017
    @Lpl guess right.哈哈。
    RqPS6rhmP3Nyn3Tm
        19
    RqPS6rhmP3Nyn3Tm  
       Jan 1, 2017 via iPhone
    Readline 读取至内存,然后写入不好吗
    AlisaDestiny
        20
    AlisaDestiny  
    OP
       Jan 1, 2017
    @guyskk 确实。我按照上面别人给的代码执行。任务管理器中内存看不出变化。就是 CPU 高了。

    @billlee 初学者,就是不知道怎么多次读才来请教的。

    @ryd994 把文件分成块并不是最终目的。所以我需要用程序来解决。
    Miy4mori
        21
    Miy4mori  
       Jan 2, 2017 via Android
    兄弟,学学流的概念吧,处理文件要都读内存里全世界都要疯啊
    qile1
        22
    qile1  
       Jan 3, 2017 via Android
    f 。 readlines()
    araraloren
        23
    araraloren  
       Jan 3, 2017
    @AlisaDestiny 自带的行读取函数大部分时候够用,大概是类似与 .readlines 之类的函数,我估计会做惰性处理,再说哪个用户会在乎那几百 M 内存。。
    kevin8096
        24
    kevin8096  
       Jan 3, 2017
    awk
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5358 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 03:49 · PVG 11:49 · LAX 20:49 · JFK 23:49
    ♥ Do have faith in what you're doing.