-1

次の行を含むファイルがあります。

//hva_SaastonJakaumanMuutos/printData/reallocationAssignment/changeUser/firstName>

行末に「John」を追加したい。

以下のコードを書いたのですが、なぜかうまくいきません。

def add_text_to_file(self, file, rowTitle, inputText):
    f = open("check_files/"+file+".txt", "r")
    fileList = list(f)
    f.close()

    j = 0
    for row in fileList :
        if fileList[j].find(rowTitle) > 0 :
            fileList[j]=fileList[j].replace("\n","")+inputText+"\n"
            break
        j = j+1

    f = open("check_files/"+file+".txt", "w")
    f.writelines(fileList)
    f.close()

私がどこで間違っているか分かりますか?

4

2 に答える 2

1

str.find0検索しているテキストが最初に見つかった場合に返されることがあります。結局、マッチが始まるインデックスを返します。

したがって、あなたの状態は次のようになります。

if fileList[j].find(rowTitle) >= 0 :

編集:

上記の修正はその日を救うでしょうが、正しい方法、Pythonic の方法で物事を行う方が良いでしょう。

  • テキスト内の部分文字列を探している場合は、foo in bar比較を使用できます。それ以外の場合で見つかるTrue場合があります。foobarFalse
  • Python でカウンターが必要になることはめったにありません。enumerateビルトインはここであなたの友達です。
  • 繰り返しと書き込みを組み合わせて、不要なステップをなくすことができます。
  • stripまたはrstrip、あなたの場合は置き換えるよりも優れています。
  • Python 2.6 以降ではwith、ファイルを扱うときにステートメントを使用することをお勧めします。ファイルのクローズを正しい方法で処理します。Python 2.5 の場合は、from __future__ import with_statement
  • 一般的に好まれる命名規則については、 PEP8を参照してください。

クリーンアップされたバージョンは次のとおりです。

def add_text_to_file(self, file, row_title, input_text):
    with open("check_files/" + file + ".txt", "r") as infile:
        file_list = infile.readlines()

    with open("check_files/" + file + ".txt", "w") as outfile:
        for row in file_list:
            if row_title in row:
                row = row.rstrip() + input_text + "\n"
            outfile.write(row)
于 2012-05-07T06:48:56.717 に答える
0

あなたは多くの情報を提供していないので、次のコードを使用しないとしても (より良い方法があると確信しているため)、問題を解決するのに役立つ場合があります。

import os.path

def add_text_to_file(self, filename, row_title, input_text):
    # filename should have the .txt extension in it
    filepath = os.path.join("check_files", filename)
    with open(filepath, "r") as f:
        content = f.readlines()

    for j in len(content):
        if row_title in content[j]:
            content[j] = content[j].strip() + input_text + "\n"
            break

    with open(filepath, "w") as f:
        f.writelines(content)
于 2012-05-07T07:03:15.253 に答える