Mush
V2EX  ›  问与答

这是一个关于 Python 读文件的问题

  •  
  •   Mush · Nov 2, 2015 · 3467 views
    This topic created in 4024 days ago, the information mentioned may be changed or developed.

    我有一个文件, ls 显示的大小是 1000k, 然后我 readline 读, 把每行的 sys.getsizeof(line)加起来, 最终结果却跟 ls 显示不一样, 请问我哪里弄错了呀?

    14 replies  •  2015-11-03 11:04:33 +08:00
    Mush
    Mush
    OP
    Nov 2, 2015
    1
    用 len 也不对......怎么都对不上
    MarioLuisGarcia
    MarioLuisGarcia
    Nov 2, 2015
    2
    getsizeofline 得到的是 python 字符串的长度吧。
    python 一个空字符""的长度都有 37 ,因为它是一个对象,带了很多方法。
    Mush
    Mush
    OP
    Nov 2, 2015
    3
    @MarioLuisGarcia 这个我 get 到了, 搞错了这个函数的意思.....但是用 len 的话也是对不上的....
    ChanneW
    ChanneW
    Nov 2, 2015
    4
    ls 是实际占用空间吧。
    操作系统不会给文件正好分配文件实际大小那么大的空间的。
    MarioLuisGarcia
    MarioLuisGarcia
    Nov 2, 2015
    5
    @Mush 如果你用 len 的话,首先得确定 len 返回来的数值单位是什么,然后你确定 ls 返回来的单位是什么?两者计算方式有无不同。然后再做对比。
    aisk
    aisk
    Nov 2, 2015
    6
    用 len 来获取的话,跟你的字符串编码方式有关,推荐不要用字符串来保存你的数据。
    Mush
    Mush
    OP
    Nov 2, 2015
    7
    @aisk 是合作方用文本保存的数据, 一个文件好几个 G.....
    Mark3K
    Mark3K
    Nov 2, 2015
    8
    使用 len 计算字符串长度,如果字符串编码是 ASCII 的话一个中文算 2 个,如果是 UNICODE 的话就算 1 个
    aisk
    aisk
    Nov 2, 2015
    9
    @Mush 跟合作方没有关系,是你读到内存之后的保存方式。另外你直接看这个 file 对象的大小不就好了?
    Mush
    Mush
    OP
    Nov 2, 2015
    10
    @aisk 是 100 多个 G 的压缩文件, 每个大概 2 到 3 个 G....
    aisk
    aisk
    Nov 2, 2015❤️1
    11
    @Mush

    f = open('xxx')
    f.seek(0, os.SEEK_END)
    print f.tell()
    Mush
    Mush
    OP
    Nov 2, 2015
    12
    @aisk 恩, 谢谢. 但我的具体情况是, 我并没有解压这个压缩文件, 我是用 tar -tvf 拿到解压后文件大小, 然后用 subprocess.Popen(["zcat", log_file],stdout=subprocess.PIPE)进行读取. 不过我具体测试了一下, 计算出来的文件大小差别不大, 可以满足我做个读取进度的需求, 所以暂时先这么用, 哪天有空了再仔细研究下.
    Freedom1
    Freedom1
    Nov 3, 2015
    13
    不要用 ls 算文件大小,用 du -h,本人亲测 ls -lh 和 ll -h 算出的文件大小不正确,用 du -h 比较接近
    aisk
    aisk
    Nov 3, 2015
    14
    @Mush 那可以考虑读到 StringIO 里再计算文件大小。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1472 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    ♥ Do have faith in what you're doing.