Python 板


LINE

其实帮人实做不是一个好做法,除非对方己经束手无策。不过我感觉你很不用心,同样的问题回了又问,还说别人的code没解决你的问题。这是当然的啊。每个人需求不同,至少他解决了他的问题还分享给你。 我也是初学者,只是刚开始这个问题我是用HEX Editor 去研究了档案的 binary code,对照档案本身的解码表一个个去解码。透过这个过程也学到了很多不同的方法和函式。如果对我有帮助的,我就当练习自己实做了一次。 以下综整这些日子以来所有的技巧。除了jpg和png外的图档不检查视为正常。格式与副档名不符的直接修改。提供有类似问题的朋友参考。 import os import shutil from PIL import Image import imghdr def is_img_valid(imgFile): isValid = True try: Image.open(imgFile).verify() except: isValid = False return isValid def is_valid_jpg_or_png(imgFile): if currentFile.endswith('jpeg') or currentFile.endswith('jpg'): try: with open(imgFile, 'rb') as f: f.seek(-2, 2) return f.read() == b'\xff\xd9' except OSError: return False elif currentFile.endswith('png'): try: with open(imgFile, 'rb') as f: f.seek(-3, 2) return f.read() == b'\x60\x82\x00' or f.read() [1:] == b'\x60\x82' except OSError: return False else: return True rootDirLists = ['Z://folder1', 'C://folder2', 'D://folder3'] count=0 corruptList =[] formatIncorrect = [] for rootDir in rootDirLists: print('============寻找目录 {} 中的图档 ============: '.format(rootDir)) for root, dirs, files in os.walk(rootDir): for file in files: count += 1 currentFile = os.path.join(root, file).lower() imgFormat = imghdr.what(currentFile) if imgFormat != None: print("检查第{}个档案中...档名为:[{}], 档头格式为 [{}], ".format(count, currentFile, imgFormat), end="") if not is_img_valid(currentFile): corruptList.append(currentFile) result = "看来是坏了" else: fileExt = currentFile.split('.')[-1] if fileExt[0:2] not in imgFormat: formatIncorrect.append(currentFile) correctedFile = currentFile.replace(currentFile.split('. print("副档名与档头格式不符, 直接更改档案名称为: [{}], " os.rename(currentFile, correctedFile) currentFile = correctedFile if is_valid_jpg_or_png(currentFile): result = "看起来没问题" else: corruptList.append(currentFile) result = "看来是坏了" print(" 检查结果 [{}]".format(result)) print("============结果 [目录={}] == [检查档案数={}] ============ ".format(rootD if corruptList: print('列出坏掉的档案:') for i in range(0, len(corruptList)): print(corruptList[i]) else: print('没有坏掉的档案.') ——- 请看图以免格式跑掉了 https://i.imgur.com/dmPruPn.jpg https://i.imgur.com/Ri7f793.jpg ※ 引述《alvinlin (艾尔文)》之铭言: : hi, 我想说应该不会再有问题了. : 不知你有试了我寄给你的那个连结的范例了吗? [後删] : ※ 引述《s4028600 (佑)》之铭言: : : 简单来说 : : 我已经用os.walk列出所有子资料夹的路径 : : 然後当作参数进行读取 : : 但是读取却只会读取列出来的最後一条 : : 我要如何让他读取下一个路径 : : 有相关的教学吗 : : 网路上只有找到列出路径 : : 找不到将这些列出的路径拿来用的方法 : : 求详细... ----- Sent from JPTT on my iPhone --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.186.172 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1564907530.A.44E.html ※ 编辑: alvinlin (123.192.186.172 台湾), 08/04/2019 16:40:26 ※ 编辑: alvinlin (123.192.186.172 台湾), 08/04/2019 16:44:45
1F:推 HenryLiKing: 推 好人难当 08/04 16:51
2F:推 s4028600: 抱歉因为我的理解力确实很差 不过也的确学了一些东西 08/04 20:04
3F:→ s4028600: 至少终於搞懂os.walk的一些用法 虽然还是很多概念完全 08/04 20:04
4F:→ s4028600: 搞不懂... 08/04 20:04
5F:推 s4028600: 现在没电脑晚点在试 08/04 20:13
6F:推 s4028600: 很多没看过的代码...不知道有没有那种看程式跑的过程来 08/04 20:18
7F:→ s4028600: 学习...像这个不知道是怎麽图像化的... 08/04 20:18
9F:→ s4028600: 6faQNTgw1f5wnm06h3ug30ci08cake.gif 08/04 20:20
10F:推 s4028600: rootDirLists是多个资料夹?如果是同目录下的多个子目 08/04 20:27
11F:→ s4028600: 录我想我终於找到方法了... 08/04 20:27
12F:推 s4028600: 经过测试後有几个问题 08/04 21:38
13F:推 s4028600: 你这个搜寻档案的能力比我用walk转到txt再读取使用还好 08/04 21:40
14F:→ s4028600: 我整个白写了... 08/04 21:40
15F:→ s4028600: count...没人建议我用这个 第一次看到 不知道怎麽问... 08/04 21:41
16F:推 s4028600: 对了 你的图片没问题 但是你的代码有几行被切断了 可能 08/04 21:44
17F:→ s4028600: 是排版失误吧 08/04 21:44
18F:推 s4028600: 有些档案被误判为错误或没找到... 08/04 21:56
19F:推 s4028600: 关於那个for in ...好吧目前看不懂 不过有个参考可以分 08/04 22:01
20F:→ s4028600: 析了 08/04 22:01
21F:推 s4028600: lower是大写转小写 这个是用在什麽情况? 删掉好像不会 08/04 22:24
22F:→ s4028600: 影响程式? 08/04 22:24
23F:→ alvinlin: 档案名称有可能是大写。全部先改成小写 08/05 01:45
24F:→ alvinlin: 我建议你先学习怎麽分析你的问题然後做出流程图 08/05 01:46
25F:→ alvinlin: 以图为准吧。文字只是帮你少打些字。 08/05 01:49
26F:→ alvinlin: 程式没有很完整的测试。只是分享供你参考。我现在看到就 08/05 01:51
27F:→ alvinlin: 有一、两个缺点,留给你想想 08/05 01:51
28F:→ alvinlin: 写程式过程比结果重要 08/05 01:55
29F:推 ouryouth: 推好人 08/05 13:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP