2017-11-24 29 views
1

CWD内のすべてのファイルの利用可能な日付とタイムスタンプをすべて抽出しようとしています。ファイルからすべての日付タイムスタンプを抽出します(変更、作成、EXIF日付など)

例えばYYYYMMDD_HHMMSS(偶数出力とても素敵ではない場合):

lastwritetime  creationtime  datetakentime 
20171124_190646 20171124_190646 20171124_190646 file1.txt 
20171124_190646 20171124_190646 20171124_190646 file2.txt 
20171124_190646 20171124_190646 20171124_190646 file3.txt 

私は(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)の構文エラーを取得しています。私が間違っていることを示唆していますか?

コード:

import os 
import time 
cwd = os.getcwd() 
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file) 
timestr = time.strftime("%Y%m%d_%H%M%S") 
files = open(cwd) 
files = [f for f in os.listdir(cwd) if os.path.isfile(f)] 
for f in files: 
    print("created: %s" % time.ctime(os.path.getctime(file) timestr)) 
    print("last modified: %s" % time.mtime(os.path.getmtime(file) timestr)) 
+1

あなたのコードに 'file'が定義されていないようです – RomanPerekhrest

+0

ありがとうございます。更新しました。 SyntaxError:無効な構文 ' – HakariDo

+0

私はあなたのコードの中で、1つの引数を持つtime.ctimeしか知りません。(これは、あなたは2つを使用しようとしています。 – atru

答えて

1

あなたと同じエラーが発生しました。まず、 "file"が定義された後、またはこの場合は "f"になった後、4行目に移動しなければなりませんでした。次に、2番目のエラーはprintコマンドの構文です。 timestrの前にコンマを置くと、うまく印刷されます。 3番目の問題は、私が許可を拒否されていたことです。明らかにディレクトリ全体を開こうとしています。

私はあなたのニーズに合ったものをあなたのスクリプトの一部に書き直しました。

import glob 
import time 
import os 

timestr = time.strftime("%Y%m%d_%H%M%S") 
files = glob.glob('*.*') 

for file in files: 
    print('created: %s' % time.ctime(os.path.getctime(file)), timestr) 
    print('last modified: %s' % time.ctime(os.path.getmtime(file)), timestr) 

しかし、あなたの最初の投稿された例を見て、これに合わせてこれを修正できると思いました。

それは私を与えた実行
import glob 
import time 
import os 

files = glob.glob('*.*') 

print(' created   modified  file_name') 
for file in files: 
    print('%s' % time.strftime("%Y%m%d_%H%M%S", time.gmtime(os.path.getctime(file))), end=' ') 
    print('%s' % time.strftime("%Y%m%d_%H%M%S", time.gmtime(os.path.getmtime(file))), end=' ') 
    print(file) 

created   modified  file_name 
20170723_223307 20170723_223307 36e73b41-4366-4bf8-825f-9f16e41b1b41.tmp 
20160928_232029 20171116_081039 desktop.ini 
20171124_215147 20171124_215413 help.py 
20171124_215637 20171124_221613 help2.py 
20171124_214353 20171124_214353 test.txt 

さて、ちょうどあなたが適切な場所にパラメータを取得し、印刷の設定の問題では、あなたの正確なに合わせてコマンドだここで私が思いついたものですニーズ。

編集:EXIFデータを抽出する要求では、コードは次のようになります。ブランクを許してください。

import glob 
import time 
import os 
from PIL import Image 

files = glob.glob('*.*') 

print('  created    modified    EXIF   file_name') 
for file in files: 
    print('%s' % time.strftime("%Y:%m:%d %H:%M:%S", time.gmtime(os.path.getctime(file))), end=' ') 
    print('%s' % time.strftime("%Y:%m:%d %H:%M:%S", time.gmtime(os.path.getmtime(file))), end=' ') 
    try: 
     print('%s' % Image.open(file)._getexif()[36867], end=' ') 
    except: 
     print('Not an image', end='   ') 
    print(file) 

globを調整してjpg、png、または任意のものを取得できることを覚えておいてください。このスクリプトはすべてを取得し、イメージでない場合は失敗したことを表示します。

+0

非常にいい!!!ありがとうございました!あなたがファイルに利用可能な場合、EXIFの日付と時間をどのように挿入するのですか?例:[https://stackoverflow.com/questions/23064549](https://stackoverflow.com/questions/23064549/get-date-and-time-when-photo-was-taken-from-exif-data) -using-pil)。私は文字通り、実際に本当の "創造"の時間を見るために、ファイルの利用可能な時間をすべて抽出したいと考えています。 – HakariDo

+1

あなたのリンクは多くの助けになりました。print( '%s'%Image.open(file)._ getexif()[36867]、end = '')次の行を追加します。安全のためにtryループに入れてください。私はこの新しい追加でコメントを更新しました。 –

1
print("created: %s" % time.ctime(os.path.getctime(file) timestr)) 

あなたはtimestrがctimeのための第2引数になりたい場合は、,カンマが必要になります。しかし、それは1つの議論しか要しない。

1970年以降の秒を表すスカラー数値とdatetimeとの間に違いがあります。 getctime()の結果をutcfromtimestamp()に渡したいようです。次に、strftime()を呼び出すことができるオブジェクトがあります。これは引数としてtimestrを受け入れます。

関連する問題