0

xml ファイル、python コード、fileList.txt があります。

xml ファイルからパスを抽出し (完了)、それを fileList.txt ファイルに書き込む必要があります。書き込みには問題ありませんが、パスがまだ存在しない場合はそのファイルをチェックインしたいと思います。私はこれを乗り越えることができます。これが私が書いたものです。for で試してみましたが、うまくいきませんでした。前もって感謝します

fileList.txt: 
USM/src/

パイソン:

for racine in rootElements.findall('racine'):
    path = racine.find('path').text 
    if path != None: 
        f_path = f_path + path + "/"  
print f_path

file = open('fileList.txt','r') 

while 1:
     ligne = file.readline()
     if(ligne == f_path):
         print("path already present")
         sys.exit(0)
     else:
         break
file.close()

file = open('fileList.txt','a') 
f_path = f_path + "\n"  
file.write(f_path)      

file.close() 
4

3 に答える 3

1

無限whileループは一度だけ実行されます。最初の行が一致するかどうかを確認し、一致する場合はプログラムを完全に終了し、一致しない場合はループを終了します。

次のようなものがうまく機能します。

with open('fileList.txt','r+') as myfile: #file is a builtin, don't name your file 'file'
    for line in myfile:
         if line.strip() == f_path:
              print "path already present"
              break
    else:
        myfile.write(f_path)
于 2012-10-03T12:51:41.840 に答える
1

他のものは良いのですが、イテラブルにファイル オブジェクトを使用するという間違いがあります。これを修正するには、File.readlines()メソッドを使用してイテラブルのリストを作成します。コード全体は次のとおりです。

for racine in rootElements.findall('racine'):
    path = racine.find('path').text 
    if path != None: 
        f_path = f_path + path + "/"  
print f_path

file = open('fileList.txt','r') 

with open('fileList.txt', 'r') as myfile:
    for line in myfile.readlines() : # here is the fix
        if line.strip() == f_path:
            print("path already present")
            sys.exit(0)

with open('fileList.txt','a') as myfile:
    f_path = f_path + "\n"  
    myfile.write(f_path)
于 2015-01-15T14:55:46.180 に答える
0

file.readline()行終了文字 ' \n' が含まれます。file.readline().strip()先頭と末尾の空白を削除してみてください。

また、あなたのwhileループは正しく見えません。sys.exit(0)最初の行で一致を見つけて を呼び出すか、一致せずにヒットしてループを終了するため、2 回以上ループすることはありませんbreak

whileループの代わりのより良いアプローチは次のとおりです。

for line in file:
    if line.strip() == f_path:
        print("path already present")
        sys.exit(0)
file.close()

編集- 「型オブジェクトは反復可能ではありません」という報告があります。これは通常、 for ループ (ここでは " file") 内のシーケンスが反復可能な型ではないことを意味します。サンプルコードでfileは、以前に開いたファイルの名前でした。filePython はすでにファイル オブジェクトのクラスとして使用しているため、これは変数の名前としては不適切です。おそらく、ファイル変数に別の名前を使用するようにコードを変更し、それに合わせて私の例を更新しなかったのでしょうか? 動作するプログラムの完全なバージョンは次のとおりです。

for racine in rootElements.findall('racine'):
    path = racine.find('path').text 
    if path != None: 
        f_path = f_path + path + "/"  
print f_path

file = open('fileList.txt','r') 

with open('fileList.txt', 'r') as myfile:
    for ligne in myfile:
        if ligne.strip() == f_path:
            print("path already present")
            sys.exit(0)

with open('fileList.txt','a') as myfile:
    f_path = f_path + "\n"  
    myfile.write(f_path)
于 2012-10-03T12:46:40.107 に答える