使用python的命令行参数

时间:2015-12-02 08:36:36

标签: 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:
    print "no match found"
    sys.exit()
    inputFile.close()

当我运行脚本时,它一直给我“找不到匹配”,但我很确定文件在那里。我看不出我做错了什么

2 个答案:

答案 0 :(得分:3)

os.walk()返回一个生成器,它为每次迭代生成带有(root, directories, files)值的元组。

您无法使用该生成器测试单个文件,而不能使用简单的in成员资格测试。

你还需要重新恢复整个路径;你不能在没有它所在的目录的情况下打开一个未分类的文件名。只需在这里使用for循环,并在找到它后breakelse循环上的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"
相关问题