如何替换先前编写的文本文件中的文本

时间:2019-02-21 10:45:13

标签: python

我有一个如下文件

project1:
analyzeFile
c1
class1
project1:
analyzeFile
c1
class1
project1:
analyzeFile
c1
class1
project1:
analyzeFile
c1
class1
project1:
analyzeFile
c1
class1

并且替换的文本应为

project1:
abcd
xyz
sunny
project1:
analyze
rty
salman
project1:
analyzeFile1
c2
class2

那只是内部参数应该改变。操作是(.txt)格式的同一文件

我的代码是

se =  "C:\\Users\\ishaan_sathe\\Desktop\\{}.txt".format(tt)
writer1 = open(se , 'a+')
for lines in writer1:
    print lines
    for za in checked_list:
        if ':' in lines :
            nameqw = lines.partition(":")
            nameqw  = nameqw[0]
            print nameqw[0]
            if tt == nameqw:
                line1 = writer1.next()
                print line1 , "line10000000000"
                path = line1.replace(line1 , str(za))
                writer1.write(path)
                print path , "hey"

该如何做?我是python新手

2 个答案:

答案 0 :(得分:0)

看看str.replace()

  

string.replace(s,old,new [,maxreplace])

     

返回字符串s的副本,并将所有出现的子字符串old替换为new。如果给出了可选参数maxreplace,则替换第一个出现的maxreplace。

在这里,您应该将文件读入内存,然后调用.replace("analyzeFile", "abcd") (第一个)。

希望这会有所帮助

答案 1 :(得分:0)

最好不要同时对文件进行读写(为了节省内存,非常大的文件除外)。当替换字符串的长度不同时,您可能会覆盖尚未读取的文本。这很棘手。

相反,请先读取内存中的所有内容,然后将所有行放入列表中(也可以使用一个大字符串)。然后修改这些行,最后用新的行覆盖文件。

类似这样的东西:

se =  "C:\\Users\\ishaan_sathe\\Desktop\\{}.txt".format(tt)

reader = open(se , 'r+')
list_of_lines = reader.read().splitlines()
for line_number, line in enumerate(list_of_lines):
    for za in checked_list:
        if ':' in line:
            nameqw = line.partition(":")
            nameqw  = nameqw[0]
            if tt == nameqw:
                list_of_lines[line_number + 1] = str(za)
reader.close()

writer = open(se, 'w+')
for line in list_of_lines:
    writer.write(line)
writer.close()