我具有以下要求:
我可以使用fnmatch
函数来搜索文件,但是如果文件不存在,那么我会遇到异常。如何添加例外?请查看readstatus()
函数,如果没有文件,请帮助我如何添加异常逻辑。
import os
import sys
import boto3
from botocore.client import Config
import configparser
import re
import os.path
import glob
import aws_encryption_sdk
import fnmatch
## Initialize the Parameters
def initconfig(input):
config = configparser.ConfigParser()
config.read_file(open( 'CONFIG_AIRBILLING.conf'))
print('Code Name is :'+ input)
global REMOTE_DIR,ACCESS_KEY_ID,ACCESS_SECRET_KEY,BUCKET_NAME,TARGET_DIR,FILENAME,SRC_DIR,FILEPATH
ACCESS_KEY_ID = config.get('ACCESS', 'ACCESS_KEY_ID')
print('ACCESS_ID_IS:'+ ACCESS_KEY_ID)
ACCESS_SECRET_KEY = config.get('ACCESS', 'ACCESS_SECRET_KEY')
BUCKET_NAME = config.get('ACCESS', 'BUCKET_NAME')
SRC_DIR = config.get(input, 'SRC_DIR')
FILENAME = config.get(input, 'FILENAME')
# FILENAME=FILENAME+'*.txt'
FILEPATH=SRC_DIR+'\\'+FILENAME
print('File Path is:'+FILEPATH)
TARGET_DIR = config.get(input, 'TARGET_DIR')
## This function will make sure file exist in Source directory
def readstatus():
for file in os.listdir(SRC_DIR):
if fnmatch.fnmatch(file,FILENAME+'*.txt'):
result='True'
print('****'+file)
movefiles(file)
## This function will move the files to AWS S3 bucket
def movefiles(result):
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
s3.Bucket(BUCKET_NAME).put_object(Key=TARGET_DIR + '/' + result, Body=result)
print('***File Moved***')
if __name__ == '__main__':
initconfig(sys.argv[1])
readstatus()
答案 0 :(得分:1)
怎么样呢?
下面的代码段使用SRC_DIR
和模式过滤fnmatch
中的文件列表,并返回列表。然后,它检查列表是否为空,即未找到与模式匹配的文件,并引发Exception
。否则,它将继续处理单个文件。
def readstatus():
files = list(filter(lambda f: fnmatch.fnmatch(f, FILENAME+"*.txt"), os.listdir(SRC_DIR)))
if not files:
raise Exception("Files matching pattern not found!")
for file in files:
print(f"***{file}")
movefiles(file)
如果找不到该文件,则可能会出现类似
的错误Traceback (most recent call last):
File "main.py", line 20, in <module>
readstatus()
File "main.py", line 10, in readstatus
raise Exception("Files matching pattern not found!")
Exception: Files matching pattern not found!
答案 1 :(得分:0)
尝试:
def readstatus():
result = False
for file in os.listdir(SRC_DIR):
if fnmatch.fnmatch(file, FILENAME + '*.txt'):
result = True
print('****' + file)
movefiles(file)
if result != True:
print("your file doesn't exist")
#add exception logic here
逻辑是,如果文件与给定的文件名匹配,则结果变量将为True
,否则result
变量将为False
。
我们使用变量result
的值作为文件是否存在的校验和。
答案 2 :(得分:0)
如果您使用的是Python 3.4+,请考虑使用pathlib
来简化许多麻烦事。
count = 0
def Pascal(n):
global count
count += 1
pasc_list = []
i = 0
j = i+1
dictionary = {0:[1],1:[1,1]}
if n in dictionary:
return dictionary[n]
else:
pasc_list.append(1)
while j < len(Pascal(n-1)):
pasc_list.append(Pascal(n-1)[i] + Pascal(n-1)[j])
i += 1
j = i + 1
pasc_list.append(1)
dictionary[n] = pasc_list
return pasc_list
a = Pascal(5)
print(a)
print(count)