os-file-example.py

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

# @Date    : 2018-09-30
# @Author  : Peng Shiyu

# 使用os 模块获取文件属性
# stat 函数可以用来获取一个存在文件的信息

import os

# 获取一个文件的状态
print(os.stat("source/poem.txt"))
"""
os.stat_result(st_mode=33188, st_ino=34523939, 
st_dev=16777220, st_nlink=1, st_uid=501, st_gid=80, 
st_size=152, st_atime=1538296119, st_mtime=1538296028, 
st_ctime=1538296028)
"""

# 获取一个打开文件的状态
f = open("source/poem.txt", "r")
print(os.fstat(f.fileno()))
"""
os.stat_result(st_mode=33188, st_ino=34523939, 
st_dev=16777220, st_nlink=1, st_uid=501, st_gid=80, 
st_size=152, st_atime=1538296119, st_mtime=1538296028, 
st_ctime=1538296028)
"""

"""
st_mode (权限模式)
st_ino (inode number)
st_dev (device)
st_nlink (number of hard links)
st_uid (所有者用户ID)
st_gid (所有者所在组ID )
st_size (文件大小, 字节)
st_atime (最近一次访问时间)
st_mtime (最近修改时间)
st_ctime (平台相关,Unix 修改时间, Windows 创建时间)
"""

# 使用os 模块修改文件的权限和时间戳
import os
import stat
from datetime import datetime

def copy_file(source, target):
    fs = open(source, "rb")
    ft = open(target, "wb")

    while True:
        chunk = fs.read(512)
        if not chunk:
            break
        ft.write(chunk)

    ft.close()
    fs.close()

def show_stat(filename):
    st = os.stat(filename)
    at = datetime.fromtimestamp(st.st_atime)
    mt = datetime.fromtimestamp(st.st_mtime)
    print("访问时间: %s  修改时间: %s" % (at, mt))

def copy_time(source, target):
    stat_s = os.stat(source)
    os.chmod(target, stat.S_IMODE(stat_s.st_mode))
    os.utime(target, (stat_s[stat.ST_ATIME], stat_s[stat.ST_MTIME]))

if __name__ == '__main__':
    source = "source/poem.txt"
    target = "source/poem.bak"

    copy_file(source, target)
    print("文件创建")
    show_stat(source)
    show_stat(target)

    copy_time(source, target)
    print("时间复制")
    show_stat(source)
    show_stat(target)