Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
378 views
in Technique[技术] by (71.8m points)

python - How to read file attributes in a directory?

For example:

import os
print(os.listdir("path/to/dir"))

will list files in a directory.

How do I get the file modification time for all files in the directory?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

When looking for file attributes for all files in a directory, and you are using Python 3.5 or newer, use the os.scandir() function to get a directory listing with file attributes combined. This can potentially be more efficient than using os.listdir() and then retrieve the file attributes separately:

import os

with os.scandir() as dir_entries:
    for entry in dir_entries:
        info = entry.stat()
        print(info.st_mtime)

The DirEntry.stat() function, when used on Windows, doesn't have to make any additional system calls, the file modification time is already available. The data is cached, so additional entry.stat() calls won't make additional system calls.

You can also use the pathlib module Object Oriented instances to achieve the same:

from pathlib import Path

for path in Path('.').iterdir():
    info = path.stat()
    print(info.st_mtime)

On earlier Python versions, you can use the os.stat call for obtaining file properties like the modification time.

import os

for filename in os.listdir():
    info = os.stat(filename)
    print(info.st_mtime)

st_mtime is a float value on python 2.5 and up, representing seconds since the epoch; use the time or datetime modules to interpret these for display purposes or similar.

Do note that the value's precision depends on the OS you are using:

The exact meaning and resolution of the st_atime, st_mtime, and st_ctime attributes depend on the operating system and the file system. For example, on Windows systems using the FAT or FAT32 file systems, st_mtime has 2-second resolution, and st_atime has only 1-day resolution. See your operating system documentation for details.

If all you are doing is get the modification time, then the os.path.getmtime method is a handy shortcut; it uses the os.stat method under the hood.

Note however, that the os.stat call is relatively expensive (file system access), so if you do this on a lot of files, and you need more than one datapoint per file, you are better off using os.stat and reuse the information returned rather than using the os.path convenience methods where os.stat will be called multiple times per file.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...