Python在行中添加文本

时间:2012-05-07 06:38:16

标签: python file

我有一个包含以下行的文件:

//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()

你知道我在哪里做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您在搜索的文字位于开头,则

str.find可能会返回0。毕竟,它返回匹配开始的索引。

所以你的病情应该是:

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

修改

上面的修正可以节省一天的时间,但是如果您采用正确的方式,这是更好的方式。

  • 如果要在文本中查找子字符串,可以使用foo in bar比较。 True如果foo可以找到barFalse可以找到enumerate
  • 你很少需要Python中的计数器。 strip内置的是你的朋友。
  • 您可以结合迭代和书写,消除不必要的步骤。
  • 在您的情况下,
  • withrstrip优于替换。
  • 对于Python 2.6+,最好在处理文件时使用from __future__ import with_statement语句。它将以正确的方式处理文件的关闭。对于Python 2.5,您需要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)
  • 有关常用的命名约定,请参阅PEP8

这是一个清理版本:

{{1}}

答案 1 :(得分: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)