def getcrc(lookfor,path):
abspath = basepath+path
for root, dirs, files in os.walk(abspath):
if lookfor in files:
#print "Found: %s" % join(root, lookfor)
filename = join(root,lookfor)
m = hashlib.md5()
for line in open(filename,'rb'):
m.update(line)
print "File",filename,"CRC is ",m.hexdigest()
return m.hexdigest()
我已经制作了上面的脚本来获取文件的crc,当文件名完全匹配时工作正常但是当违反区分大小写时,我无法打开该文件,文件名是正确但我想要使这段代码不敏感。
以下是我收到的错误:
Traceback (most recent call last):
File "C:\Users\darshanb\temp\de.ecw.python.QCsnapshot\src\XmlReaderTesting.py", line 80, in <module>
s3 = getcrc(filename,path)
File "C:\Users\darshanb\temp\de.ecw.python.QCsnapshot\src\Testing.py", line 51, in getcrc
for line in open(filename,'rb'):
UnboundLocalError: local variable 'filename' referenced before assignment
例如我在XML中有一个名为'Appointments_ecw_resource.xsl'的文件名,我想找到CRC但在实际服务器中名称较低'appointmentments_ecw_resource.xsl'有时它是大写的, 有没有办法可以忽略区分大小写检查。
答案 0 :(得分:2)
看起来您的filename
变量是在前面的if
语句的内部范围中定义的。在此范围之外初始化它或将for
循环移到内部(取决于目的)。
答案 1 :(得分:1)
您可以使用any()
和生成器表达式
lookfor = lookfor.lower()
if any(lookfor == fname.lower() for fname in files):
但是,您仍需要将for
循环缩进到if
语句中,因为如果您所查找的文件名不,那么您仍然需要不读文件:
lookfor = lookfor.lower()
if any(lookfor == fname.lower() for fname in files):
#print "Found: %s" % join(root, lookfor)
filename = join(root,lookfor)
m = hashlib.md5()
for line in open(filename,'rb'):
m.update(line)
print "File",filename,"CRC is ",m.hexdigest()
return m.hexdigest()