2017-08-15 9 views
0

私は、ディレクトリツリーを実行し、特定のExcelファイルを特定し、次にそれらを操作する最善の方法を検討しようとしています。ファイルの作者を使ってPythonのファイルを利用する

私は、ファイルの名前(データ)をスキャンすることで、必要なファイルを特定しようとしましたが、著者によってファイルを識別できれば、はるかに効果的であることがわかりました。ファイルの作成者を検索するために 'データ'を検索することから、以下の例をやり直すことはできますか?

いくつかのファイルにはファイル名にDataまたはDATAが含まれている可能性があるため、私の例ではfile.lower()を追加しました。これを行うより良い方法がある場合、私の投稿に記載されているようにファイルを操作することについてもっと学ぶための良いリソースがあるなら、それについて聞いていただければ幸いです。

import os 
import shutil 
for folderName, subfolders, filenames in os.walk(r'dir\Documents'): 

     for file in filenames: 
       file.lower() 
       if 'data' in file: 
         try: shutil.copy(os.path.join(folderName, file), 'C:\\dir\ALL DATA') 
         except: 
           print(folderName, file) 
+0

lower()は文字列を変更しませんが、文字列を返します。だから、lower_file = file.lower()のようなことをする必要があります。また、すべてのExcelファイルには、ファイルそのものに指定された作成者がありますか? – LeopoldVonBuschLight

+0

上記の例では、おそらく 'if 'data if if file.lower():' – Alexander

答えて

4

これは、ExcelファイルのメタデータにCREATOR_NAMEを持つExcelファイル用のディレクトリを検索します:

import os 
import zipfile, lxml.etree 
import shutil 

def find_excel_files(directory, creator_name): 
    for folderName, subfolders, filenames in os.walk(directory): 
     for f in filenames: 
      if f.endswith('.xlsx'): 
       f_path = os.path.join(folderName, f) 
       f_creators = get_xlsx_creators(f_path) 
       if creator_name in f_creators: 
        # One of the creators of the excel file matches creator_name 
        # Do something like copy the file somewhere... 
        print('Found a match: {}'.format(f_path)) 



def get_xlsx_creators(xlsx_path): 
    # open excel file (xlsx files are just zipfiles) 
    zf = zipfile.ZipFile(xlsx_path) 
    # use lxml to parse the xml file we are interested in 
    doc = lxml.etree.fromstring(zf.read('docProps/core.xml')) 
    # retrieve creator 
    ns={'dc': 'http://purl.org/dc/elements/1.1/'} 
    creators = doc.xpath('//dc:creator', namespaces=ns) 
    return [c.text for c in creators] 



find_excel_files(r'C:\Users\ayb\Desktop\tt', 'Tim') 

get_xlsx_creators関数のコードがSOに答える本から取られました:How to retrieve author of a office file in python?

1
from pwd import getpwuid 

for file in filenames: 
    author = getpwuid(os.stat(file).st_uid).pw_name 
    if author == '...': 
     ... 
+1

OPがドキュメントのメタデータの中の 'Author'を意味していないのでしょうか? – AChampion

+0

本当ですが、そのフィールドは一般に私の経験からはあまり信頼できません。ファイルの作成時に設定されます。他の人がオリジナルを修正して保存すると、そのメタデータは更新されません。 – Alexander

+0

OPはWindows(C:\\ dir \ ALL DATA)にあると思います。 pwdはWindowsで利用できますか? – LeopoldVonBuschLight

関連する問題