2017-04-26 4 views
2

Ich muss die Details für eine Datei in Windows lesen, damit ich die Dateiversion der Datei abfragen kann, wie auf der Registerkarte Details der Datei angezeigt EigenschaftenfensterWie kann ich die Dateidetails in Windows mithilfe der Standardbibliothek für Python 2 abrufen

File Properties Dialog

Ich habe nichts in der Standard-Bibliothek gefunden, dass diese sehr einfach zu bewerkstelligen macht aber dachte, wenn ich die richtigen Windows-Funktion finden konnte, ich es wahrscheinlich ctypes mit vollenden könnte.

Hat jemand irgendeinen beispielhaften Code oder können sie mich auf eine Windows-Funktion hinweisen, die mir diese Informationen lesen lassen würde. Ich habe mir schon eine GetFileAttributes angesehen, aber das war nicht ganz richtig, soweit ich das beurteilen konnte.

+0

tut dies: http://stackoverflow.com/questions/12521525/reading-metadata-with-python Ihnen helfen? – thebjorn

Antwort

0

Verwenden Sie die win32 api Version Information functions von ctypes. Die api ist ein wenig fummelig zu bedienen, aber ich möchte das auch so zusammengewürfelt haben a quick script als Beispiel.

usage: version_info.py [-h] [--lang LANG] [--codepage CODEPAGE] path 

Kann auch als Modul verwendet werden, siehe die VersionInfo-Klasse. Mit Python 2.7 und 3.6 gegen ein paar Dateien überprüft.

+0

Verstanden. Danke, dass Sie mich in die richtige Richtung weisen. – MrBubbles

0
import array 
from ctypes import * 

def get_file_info(filename, info): 
    """ 
    Extract information from a file. 
    """ 
    # Get size needed for buffer (0 if no info) 
    size = windll.version.GetFileVersionInfoSizeA(filename, None) 

    # If no info in file -> empty string 
    if not size: 
     return '' 

    # Create buffer 
    res = create_string_buffer(size) 
    # Load file informations into buffer res 
    windll.version.GetFileVersionInfoA(filename, None, size, res) 
    r = c_uint() 
    l = c_uint() 
    # Look for codepages 
    windll.version.VerQueryValueA(res, '\\VarFileInfo\\Translation', 
           byref(r), byref(l)) 

    # If no codepage -> empty string 
    if not l.value: 
     return '' 
    # Take the first codepage (what else ?) 
    codepages = array.array('H', string_at(r.value, l.value)) 
    codepage = tuple(codepages[:2].tolist()) 

    # Extract information 
    windll.version.VerQueryValueA(res, ('\\StringFileInfo\\%04x%04x\\' 
    + info) % codepage, byref(r), byref(l)) 

    return string_at(r.value, l.value) 
Verwandte Themen