使用python的命令行参数

使用python的命令行参数,python,Python,我有一段代码,可以让用户通过在命令行中传递一个参数来选择要更新的文件,然后它会做更多的事情,但我没有在这里包括: 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: pri

我有一段代码,可以让用户通过在命令行中传递一个参数来选择要更新的文件,然后它会做更多的事情,但我没有在这里包括:

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()
当我运行脚本时,它总是给我“找不到匹配项”,但我很确定文件在那里。我看不出我做错了什么

os.walk()
返回一个生成器,它为每次迭代生成带有
(根、目录、文件)
值的元组

您不能使用该生成器测试单个文件,不能在成员资格测试中使用简单的

您还需要重新恢复整个路径;如果没有一个未分类的文件名所在的目录,就不能打开它。只需在此处使用
for
循环,一旦找到它,就可以
中断。
for
循环上的
else
套件仅在未使用
break
时执行(例如,未找到文件):

我添加了一个
with
语句来处理文件对象的生存期;退出
with
块后,文件将自动为您关闭。

os.walk()
返回一个生成器,该生成器为每次迭代生成具有
(根、目录、文件)
值的元组

您不能使用该生成器测试单个文件,不能在
成员资格测试中使用简单的

您还需要重新恢复整个路径;如果没有一个未分类的文件名所在的目录,就不能打开它。只需在此处使用
for
循环,一旦找到它,就可以
中断。
for
循环上的
else
套件仅在未使用
break
时执行(例如,未找到文件):


我添加了一个
with
语句来处理文件对象的生存期;退出
with
块后,文件将自动关闭。

或者,您可以使用以下代码段

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"

或者,您可以使用以下代码段

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"

使用
os.listdir
而不是
os.walk
来获取
path
中的文件列表,而不是生成器。@霍尔特:但要考虑到您仍然需要使用
os.path.join(path,filename)
以打开文件。使用
os.listdir
而不是
os.walk
以获取
path
中的文件列表,而不是生成器。@Holt:但要考虑到您仍然需要使用
os.path.join(path,filename)
才能打开文件。@Holt:谢谢;他有点匆忙,我知道我应该检查一下。@Holt:谢谢;有点匆忙,我知道我应该检查。这将检查当前目录中的
filename
,而不是
path
。您确实应该使用
os.path.join()
;例如,它将负责在末尾添加缺少的路径分隔符等详细信息。这将检查当前目录中的
filename
,而不是
path
。您确实应该使用
os.path.join()
;例如,它将处理诸如在末尾添加缺少的路径分隔符之类的细节。