wp231957 发表于 2022-9-14 09:32:58

咋能获取到和windows资源管理器显示的一样:

首先我们建立一个纯文本文件XXX.TXT   utf-8格式鼠标右键----有个文件大小:4801216字节

现在我们想在python+TKINTER环境下 获取这个4801216 这个数字

代码如下:
def load():
    filepath = filedialog.askopenfilename()
    file=list(open(filepath,"r",encoding="utf-8"))
    text.insert(INSERT,file)
    txtnum["text"]=str(len(text.get("1.0",END).encode("gbk")))
    print(len(text.get("1.0",END).encode("gbk")))
    print(len(text.get("1.0",END).encode("utf-8")))
    print(len(text.get("1.0",END)))
    tkinter.messagebox.showinfo("提示","导入成功 ")

获取了三个稀奇古怪的数值:
PS D:\wpp> & D:/Python37/python.exe d:/wpp/mac_gui.py
3859680------GBK
5006912------utf8
2712448------默认
PS D:\wpp>

没有一个和4801216能吻合上

wp231957 发表于 2022-9-14 09:37:29

哦,好像差10多万个回车

Twilight6 发表于 2022-9-14 09:52:02

wp231957 发表于 2022-9-14 09:37
哦,好像差10多万个回车



是想获取文件字节数吗,os.path.getsize() 可以返回文件的字节数

或者 open 打开后,将文件指针移动到文件末尾(可以调用read() 或者 seek(0, 2) 都可以将文件指针移动到末尾)

然后调用 tell() ,返回的结果也是文件字节数

z5560636 发表于 2022-9-14 10:01:23

应该是在 文件打开层面获取到文件大小,你看到的参数是走到了窗口层
file=list(open(filepath,"r",encoding="utf-8"))

import os
stat_info = os.stat('new_file.txt')
size = stat_info.st_size

阿奇_o 发表于 2022-9-14 10:13:11

本帖最后由 阿奇_o 于 2022-9-14 10:17 编辑

你没搞清楚 encode() 是干嘛用的,就对它 len() 当然以为有问题,其实 它是 编码!
——以不同的特定规则进行编码 所得到的 字节码数据,自然和原来的 字符串大小不一样!
另外,文件的大小和文件内容的大小,也是稍微有出入的。
from tkinter import Tk, filedialog
import os

root = Tk()

fpath = filedialog.askopenfilename(initialdir='.')
print('文件路径:', fpath)
print('文件大小(多少个字节):', os.path.getsize(fpath), 'bytes')
content = ''.join(open(fpath))
encoded = content.encode('utf-8')
print('文件内容编码后的字节形式:', encoded, type(encoded))
print('文件内容编码后的字节大小:',len(encoded))
print('内容重新解码后的字符串大小:', len(encoded.decode()))

root.mainloop()

wp231957 发表于 2022-9-15 16:15:12

阿奇_o 发表于 2022-9-14 10:13
你没搞清楚 encode() 是干嘛用的,就对它 len() 当然以为有问题,其实 它是 编码!
——以不同的特定规则 ...

我主要想获取text控件里容纳了多少字节
页: [1]
查看完整版本: 咋能获取到和windows资源管理器显示的一样: