<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          S系列·修改文件的時(shí)間屬性

          共 2693字,需瀏覽 6分鐘

           ·

          2022-06-10 03:55

          S系列·修改文件的時(shí)間屬性

          S又稱水,亦可讀作Small,在日常工作學(xué)習(xí)過程中,偶爾會發(fā)現(xiàn)之前沒有看見的、小的、有趣的操作,或許這些操作對于當(dāng)下的問題解決并無意義,仍然想記錄下來,或許能以單獨(dú)寫成一篇完整的文章,則作為流水賬似的記下。

          系列文章說明:

          S系列·<<文章名稱>>

          平臺:

          • windows 10.0

          • python 3.8

          查看文件的時(shí)間屬性

          在windows電腦中,右擊文件,再點(diǎn)擊屬性,能明顯地看到創(chuàng)建時(shí)間,修改時(shí)間和訪問時(shí)間。

          三個(gè)時(shí)間的含義如名稱一樣,最容易發(fā)生變動(dòng)的為訪問時(shí)間,只要對文件做了任何操作,都會發(fā)生變化,當(dāng)對文件進(jìn)行修改且保存了,修改時(shí)間就會發(fā)生變化,而創(chuàng)建時(shí)間是在文件創(chuàng)建時(shí)就已經(jīng)設(shè)定了,可看到該文件中創(chuàng)建時(shí)間時(shí)間最早,單獨(dú)對此文件左點(diǎn)右點(diǎn)是很難改變這個(gè)時(shí)間的。

          修改文件的時(shí)間屬性

          在python中可以用os.stat查看文件的基本屬性,其中包含這三個(gè)時(shí)間屬性。

          import?os

          os.stat(r"C:\Users\admin\Desktop\1231.xlsx")

          時(shí)間屬性均是以時(shí)間戳的方式保存,如果嘗試取出屬性值修改,會產(chǎn)生報(bào)錯(cuò),僅讀屬性不能修改。

          os.utime可以幫助修改時(shí)間屬性,但僅能修改訪問時(shí)間和修改時(shí)間,且傳入的時(shí)間參數(shù)應(yīng)當(dāng)為時(shí)間戳。

          from?datetime?import?datetime

          a_time?=?datetime(2024,?4,?9).timestamp()
          m_time?=?datetime(2024,?5,?1).timestamp()
          #?分別將訪問時(shí)間和修改時(shí)間修改為2024-04-09和2024-05-01
          os.utime(r"C:\Users\admin\Desktop\1231.xlsx",?(a_time,?m_time))

          修改完后再次查看文件屬性。

          雖然僅能看到修改時(shí)間按設(shè)想成功設(shè)置為2024-05-01,訪問時(shí)間其實(shí)也是設(shè)置好了,但由于太靈活,在設(shè)置修改時(shí)間時(shí),對文件進(jìn)行了訪問,從而設(shè)置成當(dāng)前的操作時(shí)間。

          os.utime(filename, (atime, mtime))可形如這樣,atimemtime可不設(shè)定,默認(rèn)為當(dāng)前時(shí)間戳(s),如傳入,必須為時(shí)間戳浮點(diǎn)型形式,可設(shè)置成ns類型,其為整型數(shù)值。

          在os模塊,無直接函數(shù)可以直接對文件創(chuàng)建時(shí)間進(jìn)行修改。

          需要使用win32file模塊調(diào)用文件句柄對創(chuàng)建時(shí)間進(jìn)行修改,安裝:pip install pywin32

          from?win32file?import?CreateFile,?SetFileTime,?CloseHandle,?GENERIC_READ,?GENERIC_WRITE,?OPEN_EXISTING
          from?datetime?import?datetime


          def?modifyFileTime(filepath,?ctime,?mtime,?atime,?format_str="%Y%m%d?%H:%M:%S"):
          ????"""
          ????用來修改任意文件的相關(guān)時(shí)間屬性
          ????:param?filepath:?`str`,?文件路徑
          ????:param ctime, mtime, atime:?`str`,?時(shí)間格式:20210101 23:59:11
          ????:param format_str:?`str`,默認(rèn)為:"%Y%m%d %H:%M:%S"
          ????return
          ????"""

          ????#?創(chuàng)建文件句柄
          ????fh?=?CreateFile(filepath,?GENERIC_READ?|?GENERIC_WRITE,
          ????????????????????0,?None,?OPEN_EXISTING,?0,?0)
          ????createTimes?=?datetime.strptime(ctime,?format_str)
          ????accessTimes?=?datetime.strptime(atime,?format_str)
          ????modifyTimes?=?datetime.strptime(mtime,?format_str)
          ????#?設(shè)置時(shí)間
          ????SetFileTime(fh,?createTimes,?accessTimes,?modifyTimes)
          ????#?關(guān)閉句柄
          ????CloseHandle(fh)

          使用這種方式可以直接對三個(gè)時(shí)間進(jìn)行修改,GENERIC_READ | GENERIC_WRITE:可讀可寫。如不這樣設(shè)置不能對文件進(jìn)行讀寫修改。

          modifyFileTime(r"C:\Users\admin\Desktop\1231.xlsx",?'20240501?01:01:01',?'20240501?02:01:01',?'20240501?03:01:01')

          分別對創(chuàng)建時(shí)間設(shè)置成2024年5月1號的1點(diǎn)、2點(diǎn)和3點(diǎn)。

          都設(shè)置成功了。

          上面的方式使用的參數(shù)還挺多,在os.utime中可以修改訪問時(shí)間和修改時(shí)間,只要再找一個(gè)模塊修改創(chuàng)建時(shí)間就行,而win32_setctime.setctime恰好將上面的修改創(chuàng)建時(shí)間封裝成了函數(shù),再進(jìn)一步組合,parse函數(shù)處理字符串型的時(shí)間可以減少對樣式的考慮。

          import?os
          from?win32_setctime?import?setctime
          from?dateutil.parser?import?parse

          def?modifytime(filename,?ctime,?mtime,?atime):
          ????ctime?=?parse(ctime).timestamp()
          ????atime?=?parse(atime).timestamp()
          ????mtime?=?parse(mtime).timestamp()

          ????setctime(filename,?ctime)
          ????os.utime(filename,?(atime,?mtime))

          使用這個(gè)函數(shù)將文件的創(chuàng)建時(shí)間、修改時(shí)間和訪問時(shí)間分別設(shè)置為2024-05-02的10點(diǎn)、11點(diǎn)、12點(diǎn)。

          modifytime(r"C:\Users\admin\Desktop\1231.xlsx",?'20240502?10:00:00',?'20240502?11:00:00',?'20240502?12:00:00')

          結(jié)語

          通過自身對小例子程序的實(shí)踐,將文件的時(shí)間屬性進(jìn)行修改,對過程進(jìn)行整理,僅做留存使用,不建議去修改文件的時(shí)間屬性。


          2022.5.30留


          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆久久久久久久久91 | 九九热精品视频九九 | 97在线图片视频小说 | 操嫩逼视频 | 欧美成人免费在线视频 |