Saya mencoba mempertimbangkan cara terbaik untuk menjalankan melalui pohon direktori dan mengidentifikasi file excel tertentu, kemudian beralih untuk memanipulasinya dalam panda.

Saya mencoba mengidentifikasi file yang saya inginkan dengan memindai nama file, (data) tetapi saya menyadari akan jauh lebih efektif jika saya dapat mengidentifikasi file oleh penulisnya. Bagaimana saya bisa mengulang contoh di bawah ini dari mencari 'data' menjadi mencari pembuat file?

Saya menambahkan file.lower() dalam contoh saya karena beberapa file mungkin berisi Data atau DATA dalam nama file. Jika ada cara yang lebih baik untuk melakukan ini, dan jika ada sumber yang bagus untuk mempelajari lebih lanjut tentang memanipulasi file seperti yang dijelaskan dalam posting saya, saya akan berterima kasih untuk mendengarnya.

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
Iwan 15 Agustus 2017, 22:40

2 jawaban

Jawaban Terbaik

Ini akan mencari direktori untuk file excel yang memiliki creator_name dalam metadata file 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')

Kode untuk fungsi get_xlsx_creators diambil dari jawaban SO ini: Bagaimana cara mengambil pembuat file kantor dengan python?

4
LeopoldVonBuschLight 15 Agustus 2017, 20:03
from pwd import getpwuid

for file in filenames:
    author = getpwuid(os.stat(file).st_uid).pw_name
    if author == '...':
        ...
1
Alexander 15 Agustus 2017, 19:46