2

私は数日の独学のpython初心者です。Python の動作方法については基本的な理解がありますが、次の点に固執しています。

メールボックス名の Exchange サーバー メール ダンプであるテキスト ファイルのリストがあります。私はこれらのテキストファイルを何百も持っており、現在、名前形式Priv_date.txtPriv_02JAN2004.txt. それらがどのサーバーから来たのかを知る必要があるため、これらのテキスト ファイル内で、実際のメール サーバー名 (サーバー: MAILSERVER1) を含む 10 行を読み取り、これを元のファイル名に追加または追加します。

私が最終的にしたいのは、MAILSERVER1_PRIV_02JAN2004.txt. ファイルパスと名前に対してできることとできないことについて混乱していますが、何が間違っているのかわかりません。私はこれまで持っています:

import os,sys

folder = "c://EDB_TEMP"

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        fullpath=os.path.join(root,filename)
        filename_split = os.path.splitext(fullpath)

        #print fullpath
        #print filename

        with open (fullpath, "r") as tempfile:
            for line in tempfile.readlines():
                if "Server:" in line:
                    os.rename(tempfile,+line[10:]+fullpath)

しかし、私はこのエラーを受け取り続けます:

エラーは TypeError です: 単項 + の不適切なオペランド型: 'str'

4

2 に答える 2

3

os.rename(tempfile,+line[10:]+fullpath) コンマにエラーがあり、間違っているようです。

このエラーは基本的+に、コンマの直後に文字列の前に置くことはできないことを示しています。これは line[10:] です。

于 2013-05-13T12:58:42.473 に答える
2

このコードは機能し、あなたが説明したことを行います

#Also include Regular Expression module, re
import os,sys,re

#Set root to the folder you want to check
folder = "%PATH_TO_YOUR_FOLDER%"

#Walk through the folder checking all files
for root, dirs, filenames in os.walk(folder):
    #For each file in the folder
    for filename in filenames:
        #Create blank strink for servername
        servername = ''
        #Get the full path to the file
        fullpath=os.path.join(root,filename)
        #Open the file as read only in tempfile
        with open (fullpath, "r") as tempfile:
            #Iterate through the lines in the file
            for line in tempfile.readlines():
                #Check if this line contains "Server: XXXXX"
                serverline= re.findall("Server: [a-zA-Z0-9]+", line)
                #If the line was found
                if serverline:
                    #Split the line around ": " and take second part as server name
                    sname = serverline[0].split(": ")
                    #Set servername variable so isn't lost outside scope of with block
                    servername = sname[1]
        #If a servername was found for that text file
        if len(servername) > 0:
            #Rename the file
            os.rename(fullpath,root+'\\'+servername+filename)

これが行うことは、以前と同じようにディレクトリをたどって、各パスを見つけることです。各ファイルのパスを取得し、ファイルを開き、Server: SERVERNAME を含む行を探します。次に、SERVERNAME を抽出し、それを servername 変数に入れます。ファイルが終了すると、ファイルは閉じられ、スクリプトはそのファイルがサーバー名文字列を生成したかどうかをチェックします。存在する場合は、SERVERNAME を前に付けてファイルの名前を変更します。

時間があったので、それもテストすることにしたので、やりたいことをやるべきです

于 2013-05-13T13:42:59.197 に答える