python os.stat 返回的 mtime/size 始终相同

0 投票
1 回答
1320 浏览
提问于 2025-04-16 09:21

以下代码让我总是得到相同的文件大小和修改时间:

# -*- coding: utf-8 -*-

import gtk
import pygtk
import os

class LocalFileTreeView(gtk.TreeView):

    def __init__(self, model = None):
        super(LocalFileTreeView, self).__init__(model)

        self.model = gtk.TreeStore(gtk.gdk.Pixbuf, str, str, str)
        self.create_columns()
        self.set_model_data('/home/foo/Downloads/')
        self.set_model(self.model)

    def create_columns(self):
        self.icon_cell_renderer = gtk.CellRendererPixbuf()
        self.filename_cell_renderer = gtk.CellRendererText()
        self.size_cell_renderer = gtk.CellRendererText()
        self.last_modified_cell_renderer = gtk.CellRendererText()

        self.icon_column = gtk.TreeViewColumn(None, self.icon_cell_renderer, pixbuf = 0)
        self.filename_column = gtk.TreeViewColumn('filename', self.filename_cell_renderer, text = 1)
        self.size_column = gtk.TreeViewColumn('size', self.size_cell_renderer, text = 2)
        self.last_modified_column = gtk.TreeViewColumn('last modified', self.last_modified_cell_renderer, text = 3)

        self.append_column(self.icon_column)
        self.append_column(self.filename_column)
        self.append_column(self.size_column)
        self.append_column(self.last_modified_column)

    def set_model_data(self, path, iter = None):
        try:
            local_files = os.listdir(path)
            local_files.sort()
        except OSError:
            local_files = []

        for local_file in local_files:
            complete_path = path + local_file
            stat = os.stat(path)
            if os.path.isdir(complete_path):
                dir_iter = self.model.append(iter, [self.render_icon(gtk.STOCK_DIRECTORY, gtk.ICON_SIZE_SMALL_TOOLBAR), local_file, None, str(stat.st_mtime)])
                self.set_model_data(complete_path + '/', dir_iter)
            else:
                self.model.append(iter, [self.render_icon(gtk.STOCK_FILE, gtk.ICON_SIZE_SMALL_TOOLBAR), local_file, str(stat.st_size), str(stat.st_mtime)])

class LocalFileTreeViewTest:
    def __init__(self):
        self.window = gtk.Window()
        self.local_file_treeview = LocalFileTreeView()
        self.scrolled_window = gtk.ScrolledWindow()

        self.window.set_title('LocalFileTreeView Test')
        self.window.connect('destroy', gtk.main_quit)
        self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

        self.scrolled_window.add(self.local_file_treeview)
        self.window.add(self.scrolled_window)

        self.local_file_treeview.show()
        self.scrolled_window.show()
        self.window.show()

if __name__ == '__main__':
    local_file_treeview_test = LocalFileTreeViewTest()
    gtk.main()

我总是得到4096作为文件大小,1293898432.0作为修改时间(这个时间怎么格式化呢?)我该怎么才能得到正确的值呢?

谢谢。

1 个回答

6

os.stat(path) 改成 os.stat(complete_path),因为它对每个文件都在重新获取同一个路径的信息。

你可以使用 time.localtime()(或者 time.gmtime())把那个时间戳转换成一个 time 对象。

撰写回答