我需要 1)在特定目录位置找到一个zipfile 2)如果存在,则将其解压缩 3)在其内容之外找到一个特定文件,并将其移至其他目录。
def searchfile():
for file in os.listdir('/user/adam/datafiles'):
if fnmatch.fnmatch(file, 'abc.zip'):
return True
return False
如果searchfile():
print('File exists')
其他:
print('File not found')
def file_extract():
os.chdir('/user/adam/datafiles')
file_name = 'abc.zip'
destn = '/user/adam/extracted_files'
zip_archive = ZipFile (file_name)
zip_archive.extract('class.xlsx',destn)
print("Extracted the file")
zip_archive.close()
search_file
file_extract
当我执行上面的脚本时,它没有显示编译时问题或运行时问题。但它仅适用于第一个功能。当我检查extracte_files文件夹中的文件时,看不到文件。
答案 0 :(得分:0)
您定义的found
唯一位置在if
块中,因此,如果找不到abc.zip
,则found
将是未定义的。但是,即使找到了abc.zip
并定义了found
,它也被定义为searchfile()
的局部变量,您的主作用域将无法访问它。您应该在主作用域中将其初始化为全局变量,并在searchfile()
中将其声明为全局变量,以便对其所做的修改可以反映在主作用域中:
def searchfile():
global found
for file in os.listdir('/user/adam/datafiles'):
if fnmatch.fnmatch(file, 'abc.zip'):
found = True
found = False
searchfile()
if found:
print('File exists')
else:
print('File not found')
但是实际上并不需要使用全局变量,因为您可以简单地从found
返回searchfile()
作为返回值:
def searchfile():
for file in os.listdir('/user/adam/datafiles'):
if fnmatch.fnmatch(file, 'abc.zip'):
return True
return False
if searchfile():
print('File exists')
else:
print('File not found')
答案 1 :(得分:0)
请注意,您从未真正调用过searchfile()
,即使您调用过found
,如果abc.zip
不匹配也不会被定义。
如果要在单独的函数中进行文件搜索(这是个好主意),则最好将其 return 返回为成功/失败布尔值,而不要依赖于全局变量。
所以您可能想要这样的东西:(注意:代码未经测试)
import os
import fnmatch
import zipfile
def searchfile():
for file in os.listdir('/user/adam/datafiles'):
if fnmatch.fnmatch(file, 'abc.zip'):
return True # <-- Note this
return False # <-- And this
if searchfile(): # <-- Now call the function and use its return value
print('File exists')
else:
print('File not found')