我有一个包含以下行的文件:
//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()
你知道我在哪里做错了吗?
答案 0 :(得分:1)
str.find
可能会返回0
。毕竟,它返回匹配开始的索引。
所以你的病情应该是:
if fileList[j].find(rowTitle) >= 0 :
修改强>
上面的修正可以节省一天的时间,但是如果您采用正确的方式,这是更好的方式。
foo in bar
比较。 True
如果foo
可以找到bar
,False
可以找到enumerate
。strip
内置的是你的朋友。with
或rstrip
优于替换。 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)
这是一个清理版本:
{{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)