python - 如果不满足规则,则写入日志文件
问题描述
我目前正在编写代码来扫描输入文件夹中的文件并将满足要求(“规则”列表)的图像复制到另一个目录。如果文件没有满足任何给定的要求,则应将其报告给 logfile.txt,说明如下:
Error number 1, file -> data\0055\0100.jpg
但是使用我当前的代码,我得到了日志文件的重复输出,与未满足的规则无关。因此,对于日志文件中的每个文件,我都有:
Error number 1, file -> data\0055\0100.jpg
Error number 2, file -> data\0055\0100.jpg
Error number 3, file -> data\0055\0100.jpg
那么,我如何将每个条目写入具有不同“规则”编号的日志文件而不重复?另外,如果 output_dir 中的复制文件已经存在,我将如何检查?
有我当前的代码:
import os
from glob import glob
from PIL import Image
import shutil
from tqdm import tqdm
input_dir = 'data'
output_dir = 'out'
try:
if os._exists(output_dir) == False:
os.mkdir(output_dir)
except FileExistsError:
print('Directory "out" already exists! Proceeding with script')
logfile = open('logfile.txt','w+')
ext = ('jpg', 'jpeg', 'JPG', '.PEG')
dirs = sorted(glob(os.path.join(input_dir, '**/*.jpg'),
recursive=True))
def checker(input_dir, output_dir, logfile):
for i, file in tqdm(enumerate(input_dir), desc='Processing copied files!',
total=len(input_dir)):
rules = [file.endswith(ext),
os.path.getsize(file) >= 10000,
Image.open(file),
]
if all(rules):
# shutil.copy(file, output_dir)
new_filename = str(i).zfill(6) + '.jpg'
shutil.copy(file, os.path.join(output_dir, new_filename))
else:
for i, rule in enumerate(rules):
logfile.write(f'\nError number {i+1}, file -> {file}\n')
checker(dirs, output_dir, logfile)
如果您正在阅读本文,敬请关注!
解决方案
代码中的 Image.open(file) 调用不返回 True/False,它返回一个文件对象。因此,您不会进行测试(真/假、真/假、真/假),因此 all() 测试将始终返回“失败”。
我认为,您需要修改规则中的最后一个测试。
推荐阅读
- apache-spark - 从 Dataproc 写入 BigQuery 时在哪里可以找到错误?
- python - 求解 ODE 时出错:函数及其雅可比矩阵必须是可调用函数
- java - 如何知道 ListView 项是否使用两行?
- apache-spark - Is it better to partition by time stamp or year,month,day, hour
- javascript - 如何有条件地应用 CSS 类?
- flutter - 如何使用 firebase_auth(电话身份验证)在颤振应用程序中添加短信自动验证?
- reactjs - 如何在 React 中使用现有的 HTML 元素?
- ios - WebViewJavascriptBridge 不适用于 iOS 13 beta 5 中的 iPad pro(第 3 代)
- filter - Google表格查询在分组结果中获取偶数/奇数行
- azure-devops - 如何从 VSTS 触发自动化脚本并在 VSTS 中获取测试执行结果