2016-03-30 10 views
2

私は、新しいファイルに追加されたものと古いものから削除されたものを比較する最終的な目標と、同じファイルの2つを別のデータフレームでPythonにプルしようとしています。私はまた、現在の日付マイナス私が持っているファイルをプルするために使用する日、特定の数を等しくする変数を設定しましたPythonは部分的な名前とファイルのタイムスタンプに基づいてテキストファイルを読み込みます

In[1] path = r'\\Documents\FileList' 
     files = os.listdir(path) 

In[2] files_txt = [f for f in files if f[-3:] == 'txt'] 

In[3] for f in files_txt: 
      data = pd.read_excel(path + r'\\' + f) 
      df = df.append(data) 

:これまでのところ、私はこのようなコードを持っていますその変数に等しい日付:

d7 = dt.datetime.today() - timedelta(7) 

は、今のところ、私は常に同じままですが、彼らは(例えば末尾に数字を追加、ファイル名の最初の部分として、これを行う方法がわからないよ

file_03232016次にfile_03302016)。私は、ファイル名の先頭部分のディレクトリを解析し、設定した日付パラメータと一致する場合は、データフレームに追加したいと思います。

EDIT:ファイル名のテキスト日付が常にあるわけではないので、タイムスタンプを作成したシステム日付を調べる必要があることもあります。

答えて

1

対象の日付を含むファイルのリストを取得するために、元のコードを変更しました。 strftimeを使用する必要があります。

import os 
from datetime import timedelta 

d7 = dt.datetime.today() - timedelta(7) 
target_date_str = d7.strftime('_%m%d%Y') 

files_txt = [f for f in files if f[-13:] == target_date_str + '.txt'] 

>>> target_date_str + '.txt' 
'_03232016.txt' 

data = [] 
for f in files_txt: 
     data.append(pd.read_excel(os.path.join(path, f)) 
df = pd.concat(data, ignore_index=True) 
+0

これは実際にトンに役立ちます、ありがとうございます!私はもう一つ質問があります。どのように日付のシステムのタイムスタンプを作成したファイルをこのように動作させるか知っていますか?場合によっては日付がファイル名に表示されることもあります。 – JD2015

+0

実際のファイル名の例を教えてください。 – Alexander

+0

確か; price_list_20150309025753.txtがその一例です。同様の命名規則を持っているが、日時ではなく日付だけでスクリプトに取り込まなければならないファイルがあるので、上記のコードは間違いなく便利です。場合によってはprice_list_ファイルに日付/時刻スタンプや日付スタンプが一切含まれていないことがあります。それが利用できない場合はシステムを引き出すことができます。 – JD2015

1

ディレクトリ内のファイルマスクでファイルを検索するための希望のフォーマットとglobの文字列としてあなたのdatetime変数を表現するために使用strftime

import datetime as dt 
import glob 

fmask = r'\\Documents\FileList\*' + (dt.datetime.today() - dt.timedelta(7)).strftime('%m%d%Y') + '*.txt' 
files_txt = glob.glob(fmask) 

# concatenate all CSV/txt files into one data frame 
df = pd.concat([pd.read_csv(f) for f in files_txt], ignore_index=True) 

PSは、私はあなたがread_excelときの代わりにread_csvを使用したいと思いますあなたが本当にtxt拡張子のファイルを持っていない限り、txtファイルで作業していますか?

+0

私の間違いでした。私は多くのExcelファイルに対して同じコードを使用しているので、Excelではなくread_csvでコピーするのを忘れていました。 – JD2015