2016-07-18 31 views
0

更新:Pythonで今日の日付のファイルを検索しようとしている場合、私は最終的なコードを下の回答セクションに掲載しました。Pythonで今日の日付のファイルを検索

私は、プログラムによって作成されたログを含むフォルダを持っています。ログタイトルには、ユーザーの名前とログが作成された日付が含まれます。私は今日の日付を含むopenのログにPythonスクリプトを書こうとしています。今日の日付を取得するのにdatetimeを使用し、今日の場合はlogFolderContent [x]でを使用して日付を検索しました。私はこのスクリプトの小さなバージョン(3つの文字列を検索)を取得することができましたが、フォルダを検索するために書き直そうとしたときに問題が発生しました。

以下は私のスクリプトです。 @Steven Summersのおかげで、私のコードはちょっときちんとしています。私は古いコードを新しいコードに置き換えました。私はそれ以来、スクリプトが今日のファイルとやりとりしようとするとクラッシュすることに気づいています。ここで

import os 
import datetime 

# <><><><><><><><><><><><><><>  Get Today's Date <><><><><><><><><><>  
today = datetime.date.today() 
today = str(today) 
runDate = today 
print("Today's Date:", today, "\n\n\n") 

# <><><><><><><><><><><><><>  Get all today's files <><><><><><><><><>  
logFolder = r"\\foamfile\logs\POHistory" 
logFolderContent = os.listdir(logFolder) # WORKING 
logFolderContent.reverse() 
print("log folder content", logFolderContent) 
countFolderContent = len(logFolderContent) # WORKING 
print("Total Files in Folder:", countFolderContent) 
eligibleLogs = [] 
continueLogSearch = "true" 
x = 0 
for i, file in enumerate(logFolderContent): 
    if file.startswith(today): 
     eligibleLogs.append(i) 
     print("eligibleLogs[i] = ", eligibleLogs[i]) 
    elif not file.endswith(".txt"): 
     print("Non-text file found and ignored") 
    print(logFolderContent[i]) 

が出力されます。

Today's Date: 2016-07-18 

log folder content ['Thumbs.db', '2016-07-18-WIN7-BUYING.txt', (etc...) '2016-04-20-ERIC-NEW.txt'] 
Non-text file found and ignored 
Thumbs.db 
Traceback (most recent call last): 
    File "U:/JustinG/Python/Directory/Complete_1.py", line 24, in <module> 
    print("eligibleLogs[i] = ", eligibleLogs[i]) 
IndexError: list index out of range 

process finished with exit code 1 

私はラインlogFolderContent.reverseを(削除する)、スクリプトが(彼らは、以下の要件を満たしているという意味)は、すべてのファイル名を出力し、今日の日付のファイル名に達するとクラッシュします。

+0

「logFolderContentグループを逆転するとどういう意味ですか?」 本当にフォルダに584個のファイルがありますか? .txtなしの15人ですか? – pwnsauce

+0

@pwnsauce。 list.reverse()。 [file1、file2、file3]の代わりに[file3、file2、file1] – Justlieb

+0

@pwnsauceコードの下に出力を置いておきます。多分それが助けになるでしょう – Justlieb

答えて

2

私は非テキストファイルには、それようの周りにif文を入れ替える日付で開始することが可能である場合

for i, file in enumerate(logFolderContent): 
    if file.startswith(today): # Assuming the files always start with the date 
     eligibleLogs.append(i) 
     # -1 gets last item in list | most recent 
     print("eligibleLogs[i] = ", eligibleLogs[-1]) 
    elif not file.endswith(".txt"): 
     print("Non-text file found and ignored") 
     print(logFolderContent[i]) 

ようになりますforループの代わりにwhileループを、使用することをお勧め最初にそのファイルがテキストファイルであるかどうかをチェックします。または追加して、声明それは

の.txt日付とendswithをSTARTSWITHので、あなたが持っていたものとの大きな問題は、このラインであったとのtry/except文

print("eligibleLogs[x] = ", eligibleLogs[x]) 

問題はそのためではないすべてのファイルであり、日付と一致する場合、eligibleLogsのサイズはxと一致しません。したがって、whileループが終了する瞬間にリスト内の1つのアイテムが最大になることがほぼ保証されます。

たとえば、最初の一致はファイル番号100である可能性があります。したがって、リストには1つの項目がありますが、次にIndexErrorを引き起こす項目をインデックス100に取得しようとします。ループが終了し、期待していない値が得られます。

さらに、あなたはprobalalyを認識していますが、それを指摘しています。

eligibleLogs.append(i) 

一致するファイルのインデックスを追加しています。あなたのリストに見つかったマッチのファイル名が含まれるように、これを好むかもしれません。スティーブン・サマーズ(上記の彼の答えを参照)、私のコードで遊んで少しの時間に

eligibleLogs.append(file) 
0

おかげで、私は最終的に、必要に応じて作業スクリプトを持っています。他の誰かがPythonで今日の日付の文字列を検索しようとしているなら、私はコードを書き換えて、より一般的な目的を果たして下に置いています。助けてくださった皆様、どうもありがたいことに、このコードは他の人にとって役に立ちます。

import os 
import datetime 
# <><><><><><><><><><> Get Today's Date <><><><><><><><><><> 
today = datetime.date.today() 
today = str(today) 
# <><><><><><><><><><> Get Today's Files <><><><><><><><><><> 
folder = "folderlocation" 
folderContent = os.listdir(folder) 
eligibleFiles = [] 
for i, file in enumerate(folderContent): 
    if file.startswith(today): # or -> if today in file 
      eligibleFiles.append(file) 
print(eligibleFiles) 
関連する問題