2015-12-02 120 views
0

我有這樣的代碼,可以讓用戶通過在命令行中傳遞參數來選擇要更新哪個文件,然後它會做更多的事情,但我沒有在這裏包括:使用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() 

當我運行該腳本時,它一直給我「找不到匹配」,但我很確定該文件在那裏。我不知道什麼我做錯了

+1

使用'os.listdir'而不是'os.walk'來獲取'path'中的文件列表而不是生成器。 – Holt

+0

@Holt:但考慮到你仍然需要使用'os.path.join(path,filename)'來打開文件。 –

回答

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塊被退出,該文件將自動關閉。

+0

@霍爾特:謝謝;有點匆忙,我知道我應該檢查。 –

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" 
+0

這將檢查當前目錄中的'filename',而不是'path'。 – Holt

+0

@Holt我已更新我的代碼。 – niyasc

+1

你真的應該使用'os.path.join()';例如,它會處理諸如在末尾添加缺少的路徑分隔符等細節。 –