我正在為 STAGE 和 PROD 環境創建一個帶有 python 的 Lambda 函式,它將生成一個隨機的 CSV 檔案。但我需要有一個動態檔案名。
我的當前代碼如下:
filename = "/tmp/userdata_%d%d%d-%d-%d-%d.csv" % (ts.tm_year, ts.tm_mon, ts.tm_mon, ts.tm_hour, ts.tm_min, ts.tm_sec)
我在 lambda 函式中配置了環境變數(如 ENV = prod)
預期行為:
- 階段檔案名 - staging_userdata_202211-20-4-53.csv
- 產品檔案名 - production_userdata_202211-23-3-35.csv
我嘗試了類似下面的方法,但由于我對 Python 很陌生,最終出現了錯誤。
file_prefix = "/tmp/"
file_suffix = "userdata_%d%d%d-%d-%d-%d.csv" % (ts.tm_year, ts.tm_mon, ts.tm_mon, ts.tm_hour, ts.tm_min, ts.tm_sec)
filename = (os.path.join(file_prefix, os.getenv('ENV'), file_suffix))
得到以下錯誤:
{
"errorMessage": "[Errno 2] No such file or directory: '/tmp/staging/userdata_202211-21-27-36.csv'",
"errorType": "FileNotFoundError",
"stackTrace": [
" File \"/var/task/generate_csv.py\", line 26, in handler\n with open(filename, 'w', newline='') as csvfile:\n"
]
}
uj5u.com熱心網友回復:
您可以輕松地將環境名稱合并到您正在執行的現有字串格式化操作中。只需添加一個%s您希望環境名稱顯示的位置,然后將您存盤的變數放在要替換的值元組中的正確位置:
env = os.getenv("ENV")
filename = "/tmp/%s_userdata_%d%d-%d-%d-%d.csv" % (env, ts.tm_year, ts.tm_mon, ts.tm_hour, ts.tm_min, ts.tm_sec)
請注意,我ts.tm_mon在輸出中洗掉了重復包含的兩次。這可能是你想要的月份總是使用兩個數字,在這種情況下,你應該更換第二%d與d將零墊一個數字的月份數。您可能也想要時間數字!
這不是必需的,但您可以借此機會更改您的字串格式樣式。您正在使用最古老的樣式之一,使用%運算子。這種格式的風格是基于 C 的printf語法。較新的方法是str.format,最新的是 f-strings。這是 f-string 版本的樣子:
filename = f"/tmp/{env}_userdata_{ts.tm_year}{ts.tm_mon:02d}-{ts.tmhour:02d}-{ts.tm_min:02d}-{ts.tm_sec:02d}.csv"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405032.html
標籤:
