2017-06-12 5 views
0

私はpythonで解析するいくつかのログファイルを含むフォルダを持っています。Pythonリストからファイルを選択

私は次のようにフォルダに含まれるファイルのリストを表示します:[1] FileName1.log

    • を[2] FileName2.log

    し、ユーザーが選択することができますファイルリスト番号を書き込む正しいファイル。私のスクリプトでファイルを解析するために例えば

    、「FileName2.log」ユーザープレス2.

    私は、ファイルのリストを表示することができますが、私は、リストからファイルをピックアップする方法が今ありませんインデックス別。

    は、これが私のスクリプトの助けを

    import os 
    import sys 
    
    items = os.listdir("D:/Logs") 
    
    fileList = [] 
    
    for names in items: 
        if names.endswith(".log"): 
         fileList.append(names) 
    
    cnt = 0 
    for fileName in fileList: 
        sys.stdout.write("[%d] %s\n\r" %(cnt, fileName)) 
        cnt = cnt + 1 
    
    
    fileName = raw_input("\n\rSelect log file [0 -" + str(cnt) + " ]: ") 
    

    感謝です!

  • +0

    を解決を望みますか? – inspectorG4dget

    +0

    ヒント:enumerateを使用して、列挙型(fileList)のcnt、fileNameのためのよりpyononicで可読なコードを使用してください: ' –

    答えて

    1

    あなたはこのような配列内の名前がある場合:

    fileList = ['FileName1.log','FileName2.log'] 
    

    あなたはそれらのインデックスを使用してそれらを引き出すことができます(奇数は0でインデックス付けされていることを覚えておいてください)。は'FileName1.log' となるでしょう。ユーザが数字(0,1,2)あなたが望むファイルを入手してください。このように:あなたは1,2,3を求めた場合

    fileToRead=fileList[userInput] 
    

    あなたはそれが正しく0インデックスであることを確認するためにuserInput-1を使用する必要があります。 その後、あなたが今持っているファイルを開きます。あなたは他の多くの言語のようにPythonでオープンhere

    +0

    ありがとう!私は私の問題を解決しました。インデックスからリスト要素を選択することはできないと思います。私はそれがタプルだけで可能だと思います。 – Federico

    1

    fileListは、ファイルのリストで、fileNameは、ユーザーの入力の場合は、ユーザーは次のように使って、選択したファイルを参照することができます。

    fileList[fileName] 
    
    +0

    ログファイル名が非常に長いため、ファイル名全体を数字で表示しないようにします。私は、ファイルリストのインデックスを持つファイルを選択します。 – Federico

    +0

    はい、まさにこのコードがやっていることです。ユーザーはインデックスを入力するだけで済みます。 –

    +0

    提案ありがとう – Federico

    0

    をただ、最終的にはこのような何かを追加します...

    sys.stdout.write(fileList[int(fileName)]) 
    
    0

    インデックスについての詳細を読むことができ

    f=open(fileToRead, 'r') 
    

    は0から始まり、これを試してみてください:

    import os 
    import sys 
    
    items = os.listdir("D:/Logs") 
    
    fileList = [] 
    
    for names in items: 
        if names.endswith(".log"): 
         fileList.append(names) 
    
    cnt = 0 
    for fileName in fileList: 
        sys.stdout.write("[%d] %s\n\r" %(cnt, fileName)) 
        cnt = cnt + 1 
    
    
    fileName = int(raw_input("\n\rSelect log file [0 - " + str(cnt - 1) + "]: ")) 
    print(fileList[fileName]) 
    

    入力をraw_input()からintにキャストする必要があります。そして得られた数をあなたのリストのインデックスとして使うことができます。 0いくつかの変更とコードのあなた自身のバージョン

    0
    import glob 
    import os 
    
    dirpath = r"D:\Logs" # the directory that contains the log files 
    prefix = "FileName" 
    fpaths = glob.glob(os.path.join(dirpath, "{}*.log".format(prefix))) # get all the log files 
    fpaths.sort(key=lambda fname: int(fname.split('.',1)[0][len(prefix):])) # sort the log files by number 
    
    print("Select a file to view:") 
    for i,fpath in enumerate(fpaths, 1): 
        print("[{}]: {}".format(i, os.path.basename(fpath))) 
    
    choice = int(input("Enter a selection number: ")) # assuming valid inputs 
    choice -= 1 # correcting for python's 0-indexing 
    
    print("You have chosen", os.path.basename(fpaths[choice])) 
    
    1
    import os 
    import sys 
    
    items = os.listdir("D:/Logs") 
    
    fileList = [name for name in items if name.endswith(".log")] 
    
    for cnt, fileName in enumerate(fileList, 1): 
        sys.stdout.write("[%d] %s\n\r" % (cnt, fileName)) 
    
    choice = int(input("Select log file[1-%s]: " % cnt)) 
    print(fileList[choice]) 
    

    1等秒のファイルで、最初のファイルであり、これは、Pythonのバージョンを使用しているあなたの目的

    関連する問題