使用新字符串

时间:2017-04-09 02:44:53

标签: python python-3.x file replace

我在文本文件中有一个字符串列表。弦乐是早,晚,太阳,月亮。我想要做的是用另一个字符串替换其中一个字符串。例如,我会输入早上删除并替换下午。当字符串清楚地出现在列表中时,我收到一条错误,上面写着“builtins.ValueError:list.remove(x):x not in list”。

def main():
    x = input("Enter a file name: ")
    file = open(x , "r+")
    y = input("Enter the string you want to replace: ")
    z = input("Enter the string you to replace it with: ")
    list = file.readlines()
    list.remove(y)
    list.append(z)
    file.write(list)
    print(file.read())

main()

如果有更好的方法以另一种方式实现相同的结果,请告诉我。谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

以下是一些想法:

  • str.replace()函数是替换字符串s.replace(y, z)的最简单方法。

  • re.sub()功能可让您搜索模式并替换为字符串:re.sub(y, z, s)

  • fileinput模块允许您就地修改。

这是一种方法:

import fileinput
import re

with fileinput.input(files=('file1.txt', 'file2.txt'), inplace=True) as f:
    for line in f:
        print( re.sub(y, z, line) )

这是另一个想法:

  • 而不是逐行处理,只需将整个文件作为单个字符串读取,修复它,然后将其写回。

例如:

import re

with open(filename) as f:
    s = f.read()
with open(filename, 'w') as f:
    s = re.sub(y, z, s)
    f.write(s)

答案 1 :(得分:0)

假设您的txt保存在src.txt

morning
night
sun
moon

在Windows中,您可以使用此批处理脚本,保存在replace.bat

@echo off
setlocal enabledelayedexpansion
set filename=%1
set oldstr=%2
set newstr=%3

for /f "usebackq" %%i in (%filename%) do (
    set str=%%i
    set replace=!str:%oldstr%=%newstr%!
    echo !replace!
)

用途:

replace.bat src.txt morning afternoon > newsrc.txt

grepWin

使用sedgawk可能更简单。

sed -i "s/morning/afternoon/g" src.txt

答案 2 :(得分:-1)

也许您正在寻找Python replace()方法?

str = file.readlines()
str = str.replace(y, z) #this will replace substring y with z within the parent String str