-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如果foo可以在barFalse其他地方找到。
  • 在 Python 中你很少需要计数器。enumerate内置是你的朋友。
  • 您可以将迭代和编写结合起来,消除不必要的步骤。
  • strip或者rstrip在你的情况下比替换更好。
  • with对于 Python 2.6+,在处理文件时最好使用语句。它将以正确的方式处理文件的关闭。对于 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 回答