2017-11-10 21 views
-1

ディレクトリには数字と非数字も含まれているファイルがいくつかあります。 abc1710.csv、xyz1709.txt、abc1708.txt、abc.txt、xyz.csvと言うことができます。 fileNameから最新のYYMMのみを抽出します。ディレクトリ内の最新のyymmでファイルを取得するには?

FileNames = (next(os.walk('C:\\Python34\\PyScript'))[2]) 

def check_file_name(f): 
    try: 
     digits = f[-4:] 
     if len(digits) != 4: 
      return False 
     int(f[-4:]) 
    except: 
     return False 
    return True 
# first filter out bad file names: 
good_filenames = [x for x in FileNames if check_file_name(x)] 

# now run the code on "good names" only: 
fileName=(max(good_filenames)) 
value=(fileName[-4:]) 
result = re.sub(r'[a-z]+', '', fileName) 
print(result) 
+0

どこに問題がありますか? – L3viathan

+0

エラー: ValueError:max()argが空のシーケンス – King

答えて

0

機能check_file_nameは、拡張子が既にトリミングされていると仮定していますが、それを全体のファイル名を与えます。あなたが最も多くを取得したい場合、あなたはまた、数字上ではなく、ファイル名にあなたの比較を行う必要があり、また

good_filenames = [x for x in FileNames if check_file_name(x[:-4])] 

を行うことによって固定する必要があります。

fileName=max(good_filenames, key=lambda x: int(x[-8:-4])) 

今後の提案:クラス名

  • に関数呼び出しの周りに括弧を入れる必要(例:はありません以外

    • は、キャメルケースを使用しないでください。)
  • +0

    私は行の置換を試みましたが、 "。"を含む6文字を取っています。ファイル名の – King

    +0

    正しい出力が得られません。私はこれらのファイルのリストを持っていますが、出力として1709を取得しています。:( abc1708.fmt、abc1710.txt、pqr-1707.fmt、xyz1709.txt – King

    +0

    これは、文字列のシーケンスで "それに応じて私の答えを更新します – L3viathan

    関連する問題