2017-01-24 1 views
0

Я начинаю работать в python и пытаюсь изменить время доступа() подкаталогов и файлов родительского каталога. Я обнаружил, что, как изменить время доступа файла здесь 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 , Я не мог видеть изменение метки времени доступа. Где я иду не так? Является ли третий код правильным для touch всех файлов и подкаталогов?

Я использую python 2.6.

+0

Почему вы используете версию Python, которой исполнилось 9 лет? – dawg

+0

Ваш метод touch определен, но не вызывается. Возможно, вы неправильно скопировали код в свой вопрос? – Irisshpunk

ответ

1

Приятное использование примеров! Вы определяете функцию (касание) в середине цикла for, но ее никогда не вызывают. Еще один совет, когда начинаешь разбрасывать «печатные» утверждения вокруг скрипта, может действительно помочь понять, что происходит. Кроме того, 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) 
Смежные вопросы