2017-01-24 6 views
0

私はPythonの初心者で、親ディレクトリのサブディレクトリとファイルのアクセス時間(touch)を変更しようとしています。私はどのようにファイルのアクセス時刻を変更するには、ここImplement touch using Python?Pythonを使ってディレクトリ内のすべてのファイルのアクセス時間を

import os 
def touch(fname, times=None): 
    with open(fname, 'a'): 
     os.utime(fname, times) 

代わりのfname以上が、私は親ディレクトリのサブディレクトリとファイルを持っているしたいことがわかりました。だから私は、ディレクトリをループの別の質問が見つかりました:Iterating through directories with Python

import os 
rootdir = 'C:/Users/sid/Desktop/test' 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     print os.path.join(subdir, file) 

上記の例からコードを組み合わせることを、私はコードを作成しました:

import os 
rootdir = '/usr/sf/adir' 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     fname = os.path.join(subdir, file) 
     def touch(fname, times=None): 
      with open(fname, 'a'): 
       os.utime(fname, times) 

コードがエラーなしで実行されますが、私がやったls -lアクセスタイムスタンプが変更されているのを確認できませんでした。どこが間違っていますか? 3番目のコードはtouchすべてのファイルとサブディレクトリに対して正しいですか?

私はPython 2.6を使用しています。

+0

なぜ9歳のPythonバージョンを使用していますか? – dawg

+0

あなたのメソッドのタッチは定義されていますが呼び出されることはありません。おそらくあなたの質問にコードを間違ってコピーしましたか? – Irisshpunk

答えて

1

例を使いましょう!そのforループの途中で関数(タッチ)を定義していますが、呼び出されることはありません。もう1つのヒントは、スクリプトの周りに散らばった "print"ステートメントを開始するときに、実際に何が起こっているのかを理解するのに役立ちます。また、os.utimeは最初のパラメータとして文字列を取ります。そのため、ファイルを開く際にポイントがありません。その部分をスキップできます。

import os 
rootdir = 't3' 
print("Checking "+rootdir) 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     fname = os.path.join(subdir, file) 
     print("touching "+fname); 
     os.utime(fname, None) 

それは(多分あなたは将来的に、より複雑な何かをする必要がありますか?)関数にタッチを行うためのロジックを分離するために、悪い考えではありません。それは次のようになります:

import os 

def touch(file): 
    print("touching "+file); 
    os.utime(file, None) 

rootdir = 't3' 
print("Checking "+rootdir) 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     fname = os.path.join(subdir, file) 
     touch(fname) 
関連する問題