0

Python では、特定のヘッダー タイプ (PST ファイル、ヘッダー シーケンス 21 42 44 4E) を持つファイルを検索して、保存したファイル ディレクトリにコピーするのに助けが必要です。

以下は、私のコードからの関連する抜粋です。

# get working directory of my program
ori_path=os.getcwd()
# this is where the file is saved(from the root directory of my program)
temp = "\etc\Saved Files"
# obtain value written in textbox, the path to search
path_to_copy_from=self.textbox.GetValue()
# create the absolute destination path so that the files don't end up somewhere they shouldn't be  
copy_path="{}{}".format(ori_path,temp)     
# change working directory to the one specified by user
os.chdir(path_to_copy_from)

次のようなコピーを行うために shutil を使用します。

shutil.copy(files,copy_path)

私が見つけたいくつかの検索では、itertools を使用して言及されていましたが、その例を理解できません (したがって、なぜ質問をしているのか)。ファイル ヘッダーを見て、ヘッダーが PST ヘッダー形式と一致する場合に shutil を呼び出すコードを考え出すのに助けが必要です。

4

2 に答える 2

0

junuxxのソリューションを使用して、ディレクトリ内のすべてのファイルに対してこれを行う方法を考え出しました。最終的なコードは次のようになります

     import wx #this is for GUI interfaces i made to interact with the user. aka wxPython
     import os
     import glob
     import shutil
     #the above are the needed libraries. 
     path_to_copy_from=self.textbox.GetValue() #obtain value written in textbox(made with wxPython)
     if os.path.exists(path_to_copy_from):
        ori_path=os.getcwd()#get working directory of my program
        #combine ori_path and temp to create the destination path for files to be copied to
        copy_path="{}{}".format(ori_path,temp)
        #change working directory to the one specified by user
        os.chdir(path_to_copy_from)
            #to copy files based on header
            header = ""
            pst_header="21 42 44 4e "
            for self.files in glob.glob("*.*"):
                try:
                    with open(self.files, 'rb') as f:
                        for i in range(4):
                            byte = f.read(1)
                            header += hex(ord(byte))[2:] + " "

                        if header == pst_header:
                            shutil.copy(self.files,copy_path)
                            #the following 2 lines tells the user using a textbox i made earlier that something is happening. made for a textctrl i made with wxPython
                            self.textbox2.AppendText("Found file with .pst header.\n")
                            self.textbox2.AppendText("Copied {} to {}. \n".format(self.files,copy_path))
                            #to change copied file to read only
                            path_to_file="{}\{}".format(copy_path,self.files)
                            #set the file as read-only(for my program only, not necessary to have)
                            os.chmod(path_to_file,0444)
                        #to remove the string already in header for next iteration
                        header = "" 
                #simple exception handling. change as you need
                except TypeError, ex:
                    pass
                except IOError, ex:
                    pass

どうもありがとう :)

于 2013-10-08T00:42:57.637 に答える