基本上我有一個 tacacs 檔案夾,里面有很多存檔檔案,準確地說,每天創建 3 個。我正在尋找一個腳本,用戶在啟動腳本時必須輸入一個日期,它會向他顯示在該日期創建(或最后修改)的檔案。
我還計劃這樣做,以便用戶必須在 3 個檔案中選擇他想查看的檔案。但現在我只是想在 cli 上顯示這三個檔案。
但是我的腳本不接受我給它的日期。每次顯示我輸入的月份時,我都會收到“SyntaxError:無效語法”。
Traceback (most recent call last):
File "scriptacacs2.py", line 6, in <module>
date_entry = input('Enter a date in YEAR, MONTH, DAY format \n')
File "<string>", line 1
2022 04 12
^
SyntaxError: invalid syntax
代碼是:
import re
import sys
import os
from datetime import datetime
date_entry = input('Enter a date in YEAR, MONTH, DAY format \n')
path = "/applis/tacacs/log/"
dirs = os.listdir(path)
mtime = datetime(date_entry).timestamp()
list_of_files = [
file for file in glob.glob(path '*.gz')
if os.path.getmtime(file) == mtime
]
print (list_of_files)
我看不出是什么導致了這個語法錯誤。我的代碼有什么問題?
uj5u.com熱心網友回復:
我不確定你為什么會SyntaxError出錯。我猜這是因為您使用的是 Python2 并且input對于您應該使用的 python2 表現不同(它試圖決議輸入)raw_input。
但是日期的決議不正確。
如果您希望它以2022,01,01您應該使用的格式決議日期:
datetime.strptime("2022,01,23", "%Y,%m,%d")或者,如果您希望能夠使用空格:
datetime.strptime(re.sub("\s ", "", "2022, 01, 23"), "%Y,%m,%d")
此外,您可能不想測驗時間戳的相等性,您想檢查日期的相等性。所以我會這樣做:
import re
import os
import glob
from datetime import datetime, timedelta
date_entry = input('Enter a date in YEAR, MONTH, DAY format \n')
date = datetime.strptime(re.sub("\s ", "", date_entry), "%Y,%m,%d").date()
path = "/applis/tacacs/log/"
list_of_files = [
file for file in glob.glob(path '*.gz')
if date == datetime.fromtimestamp(os.path.getmtime(file)).date()
]
print(list_of_files)
uj5u.com熱心網友回復:
您的第一個問題是您嘗試為datetime物件提供字串,但是,他需要整數。(請參閱檔案)。因此,首先,您需要使用該split方法拆分收到的日期。(這里我對輸入進行了一點改動,以使句子更具可讀性和實用性)。然后,您需要使用map函式將數字作為字串轉換為整數,最后使用 解壓縮值*以傳遞引數。
您的第二個問題是使用 glob 庫,而您已經使用該listdir方法檢索了檔案。
最后,您正在檢查帶有時間戳的檔案的日期,這是一個錯誤,因為時間戳值表示自 1970 年 1 月 1 日以來的秒數,如果一個檔案是在一秒后創建的,它們將不會具有相同的時間戳。因此,您必須將這些時間戳轉換為日期,然后檢查日期是否相同。
這是最終結果:
import os
from datetime import datetime
PATH = "applis/tacacs/log/"
def is_same_date(t1, t2):
"""
Check if the two provided timestamps represents the same date
"""
return datetime.fromtimestamp(t1).date() == datetime.fromtimestamp(t2).date()
date_entry = map(int, input("Enter a date in 'YYYY/MM/DD' format \n").split("/"))
dirs = os.listdir(PATH)
mtime = datetime(*date_entry).timestamp()
list_of_files = [f for f in dirs if is_same_date(os.path.getmtime(PATH f), mtime)]
print(list_of_files)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458911.html
標籤:Python python-2.7 文件 约会时间
上一篇:PHP多檔案上傳,允許空欄位
