Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
接收区分大小写的错误';当使用Python读取文件时_Python_Python 2.7 - Fatal编程技术网

接收区分大小写的错误';当使用Python读取文件时

接收区分大小写的错误';当使用Python读取文件时,python,python-2.7,Python,Python 2.7,我已经制作了上面的脚本来获取文件的crc,当文件名完全匹配时,它可以正常工作,但当违反区分大小写原则时,我无法打开该文件,文件名是正确的,但我想使该代码不区分大小写 以下是我收到的错误: def getcrc(lookfor,path): abspath = basepath+path for root, dirs, files in os.walk(abspath): if lookfor in files: #print "Found:

我已经制作了上面的脚本来获取文件的crc,当文件名完全匹配时,它可以正常工作,但当违反区分大小写原则时,我无法打开该文件,文件名是正确的,但我想使该代码不区分大小写

以下是我收到的错误:

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()
回溯(最近一次呼叫最后一次):
文件“C:\Users\darshanb\temp\de.ecw.python.QCsnapshot\src\XmlReaderTesting.py”,第80行,在
s3=getcrc(文件名、路径)
文件“C:\Users\darshanb\temp\de.ecw.python.qcsnashot\src\Testing.py”,第51行,在getcrc中
对于打开的行(文件名为'rb'):
UnboundLocalError:分配前引用的局部变量“filename”
例如,我在XML中有一个文件名为'Appointments\u ecw\u resource.xsl',我希望找到该文件的CRC,但在实际服务器中,该文件名为较低的'appoints\u ecw\u resource.xsl',有时是大写的do,
是否有一种方法可以忽略区分大小写检查。

看起来您的
文件名
变量是在前面的
if
语句的内部范围中定义的。将其初始化在此范围之外,或将
for
循环移到内部(取决于用途)。

看起来您的
文件名
变量是在前面的
if
语句的内部范围中定义的。将其初始化在此范围之外,或将循环的
移到内部(取决于用途)。

您可以使用
any()
和生成器表达式无意识地匹配文件大小写:

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
但是,您仍然需要缩进
,使
循环位于
if
语句中,因为如果查找的文件名不在那里,您仍然不需要读取文件:

lookfor = lookfor.lower()
if any(lookfor == fname.lower() for fname in files):

通过使用
any()
和生成器表达式,可以不敏感地匹配文件大小写:

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
但是,您仍然需要缩进
,使
循环位于
if
语句中,因为如果查找的文件名不在那里,您仍然不需要读取文件:

lookfor = lookfor.lower()
if any(lookfor == fname.lower() for fname in files):

这是正确的答案。他的
for
循环在一个空列表上,这意味着循环体从未执行,变量也没有初始化。这是正确的答案。他的
for
循环在空列表上,这意味着循环体从未执行,变量也未初始化。我相信fname.lower应该是fname.lower()。另外,对lookfor.lower()使用一个临时变量不是更好,而不是对文件中的每个文件进行一次降级吗?@dstromberg:oops,更正。是的,临时的会更好。我相信fname.lower应该是fname.lower()。另外,对lookfor.lower()使用一个临时变量不是更好,而不是对文件中的每个文件进行一次降级吗?@dstromberg:oops,更正。是的,临时的会更好。