2017-08-15 34 views
0

我試圖考慮通過一個目錄樹運行,並確定具體的Excel文件的最佳方式中的文件,然後移動到大熊貓操縱它們。使用的文件的作者利用在Python

我試圖通過掃描,以確定我想要的文件的文件名,(數據),但我意識到這將是更爲有效的,如果我能夠通過他們的作者來識別文件。我如何能夠重新搜索下面的例子來搜索'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_file = file.lower()這樣的事情,並且所有的excel文件都有一個在文件本身指定的作者? – LeopoldVonBuschLight

+0

在上面的例子中,你可能想'如果「數據」如果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)。 Windows上是否提供pwd? – LeopoldVonBuschLight