このコード行は、pythonスクリプトにあります。特定のディレクトリにあるすべてのファイルで* cycle * .logを検索します。
for searchedfile in glob.glob("*cycle*.log"):
これは完全に機能しますが、ネットワークの場所でスクリプトを実行すると、スクリプトが順番に検索されず、ランダムに検索されます。
コードに日付順で強制的に検索させる方法はありますか?
この質問はphpに対して行われましたが、違いがわかりません。
ありがとう
ファイルを日付順に並べ替えるには:
import glob
import os
files = glob.glob("*cycle*.log")
files.sort(key=os.path.getmtime)
print("\n".join(files))
ソート方法 も参照してください。
上手。答えはノーです。 glob
使用 os.listdir
これは以下によって記述されます:
"パスで指定されたディレクトリ内のエントリの名前を含むリストを返します。リストは任意の順序です。特別なエントリ「。」は含まれません。および '..'がディレクトリに存在する場合でも。 "
だからあなたは実際にあなたがそれを並べ替えることができてラッキーです。自分で分類する必要があります。
これは私にとってはうまくいきます:
import glob
import os
import time
searchedfile = glob.glob("*.cpp")
files = sorted( searchedfile, key = lambda file: os.path.getctime(file))
for file in files:
print("{} - {}".format(file, time.ctime(os.path.getctime(file))) )
また、これは作成時間を使用することに注意してください。変更時間を使用する場合、使用される関数はgetmtime
でなければなりません。
本質的に@jfsと同じですが、sorted
を使用して1行で
import os,glob
searchedfiles = sorted(glob.glob("*cycle*.log"), key=os.path.getmtime)
パスが並べ替え可能な順序になっている場合は、いつでも文字列として並べ替えることができます(他の人がすでに回答で述べているように)。
ただし、パスで%d.%m.%Y
のような日時形式を使用する場合は、少し複雑になります。 strptime
はワイルドカードをサポートしていないため、ワイルドカードを含むパスから日付/時刻を解析するモジュール datetime-glob を開発しました。
datetime-glob
を使用すると、ツリーをウォークスルーし、ディレクトリをリストし、日付/時刻を解析して、タプル(date/time, path)
としてソートできます。
モジュールのテストケースから:
import pathlib
import tempfile
import datetime_glob
def test_sort_listdir(self):
with tempfile.TemporaryDirectory() as tempdir:
pth = pathlib.Path(tempdir)
(pth / 'some-description-20.3.2016.txt').write_text('tested')
(pth / 'other-description-7.4.2016.txt').write_text('tested')
(pth / 'yet-another-description-1.1.2016.txt').write_text('tested')
matcher = datetime_glob.Matcher(pattern='*%-d.%-m.%Y.txt')
subpths_matches = [(subpth, matcher.match(subpth.name)) for subpth in pth.iterdir()]
dtimes_subpths = [(mtch.as_datetime(), subpth) for subpth, mtch in subpths_matches]
subpths = [subpth for _, subpth in sorted(dtimes_subpths)]
# yapf: disable
expected = [
pth / 'yet-another-description-1.1.2016.txt',
pth / 'some-description-20.3.2016.txt',
pth / 'other-description-7.4.2016.txt'
]
# yapf: enable
self.assertListEqual(subpths, expected)
os.path.getmtime
またはos.path.getctime
を使用して、戻ってきたファイルのリストを並べ替えることができます。この他の SO answer を参照し、コメントにも注意してください。
グロブ番号を使用します。現時点では、globはすべてのファイルをコードに同時に保存しており、これらのファイルを整理する方法はありません。最終結果だけが重要な場合は、ファイルの日付をチェックし、それに基づいて再ソートする2番目のループを使用できます。解析順序が重要である場合、globはおそらくこれを行うための最良の方法ではありません。