我有这个代码,让用户通过在命令行中传递一个参数来选择他想要更新的文件,然后它会做更多的事情,但我没有在这里包含:
import sys
import os
from sys import argv
path = "/home/Desktop/python/test"
files = os.walk( path )
filename = argv[1]
if filename in files:
inputFile = open(filename, 'r')
else:
print "no match found"
sys.exit()
inputFile.close()
当我运行脚本时,它一直给我“找不到匹配”,但我很确定文件在那里。我看不出我做错了什么
答案 0 :(得分:3)
os.walk()
返回一个生成器,它为每次迭代生成带有(root, directories, files)
值的元组。
您无法使用该生成器测试单个文件,而不能使用简单的in
成员资格测试。
你还需要重新恢复整个路径;你不能在没有它所在的目录的情况下打开一个未分类的文件名。只需在这里使用for
循环,并在找到它后break
。 else
循环上的for
套件仅在不使用break
时执行(例如,找不到该文件):
path = "/home/Desktop/python/test"
filename = argv[1]
for root, directories, files in os.walk(path):
if filename in files:
full_path = os.path.join(root, filename)
break
else:
print "no match found"
sys.exit()
with open(full_path) as input_file:
# do something with the file
我添加了with
语句来处理文件对象的生命周期;退出with
块后,文件会自动关闭。
答案 1 :(得分:1)
或者,您可以使用以下代码段。
import os.path
filename = argv[1]
path = "/home/Desktop/python/test/"
if os.path.isfile(path + filename):
inputFile = open(path + filename, "r")
else:
print "File Not Found"