Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用文本块替换特定文本_Python_Replace_Readline - Fatal编程技术网

Python 用文本块替换特定文本

Python 用文本块替换特定文本,python,replace,readline,Python,Replace,Readline,我试图用一块文本替换一小段文本。我希望使用python的replace函数替换这段文本。我真的很想使用sed来获得这份工作,但我现在使用的是windows机器。无论如何,这是我的脚本,不知道为什么文本块没有被替换 # Change the current working directory to IDX location import os print os.getcwd() os.chdir(##location of my text files##) print os.getcwd()

我试图用一块文本替换一小段文本。我希望使用python的replace函数替换这段文本。我真的很想使用
sed
来获得这份工作,但我现在使用的是windows机器。无论如何,这是我的脚本,不知道为什么文本块没有被替换

# Change the current working directory to IDX location
import os
print os.getcwd()
os.chdir(##location of my text files##) 
print os.getcwd()

#Read file names

com_line=raw_input("File name please:")
contents=[]
strs = '#DREFIELD IDOL_SOURCE="idol source"\n#DREFIELD IDOL_TAXONOMY="taxonomy data"\n #DREFIELD IDOL_CATEGORY="IDOL_CATEGORY"\n #DREFIELD IDOL_PROMOTION="idol_promotion"\n #DREFIELD IDOL_PROMOTION_TERM="IDOL_PROMOTION_TERM"\n #DREFIELD IDOL_WHATSNEW="IDOL_WHATSNEW"\n #DREFIELD IDOL_SUMMARY="IDOL_SUMMARY"\n #DREFIELD IDOL_URL="IDOL_URL DATA"\n #DREFIELD IDOL_FORMNUMBER="IDOL_FORMNUMBER"\n #DREFIELD IDOL_DESCRIPTION="IDOL_DESCRIPTION DATA"\n#DRESECTION 0\n'
with open(com_line) as f:
     contents.append(f.readlines())
f.close

#Writing to file
f2 = open("test.idx", 'w')

for content in contents:
    for s in content:
        if s == '#DRESECTION 0\n':
            s.replace("#DRESECTION 0\n", strs)
        f2.write("%s" % s)
f2.close

我测试了这段代码,它也在输入条件语句。只是想知道为什么需要的文本
#DRESECTION 0\n
没有被
strs
取代?此外,我正在寻找做这个大的文本文件值几次演出的操作。有没有更好的方法来读取python中的大型文本文件?

python中的Stings是不可变的。一旦创建了字符串对象,就不能对其进行修改。但是,您可以基于旧字符串创建新字符串

当您调用
s.replace
时,它不会就地修改
s
,因为这是不可能的。相反,
str.replace
方法返回一个新字符串。您可以执行
s=s.replace(…)
,它应该可以工作。但是,当您可以将名称重新绑定到新字符串时,将一个字符串的全部内容替换为另一个字符串是没有意义的

我建议使用:

    if s == '#DRESECTION 0\n':
        s = strs
    f2.write(s)
我还更改了
write
调用。这里不需要使用字符串替换,因为您希望编写整个字符串(并且不需要额外的内容)。只需传递
s
作为参数

您的代码还有一些其他小问题:

例如,您没有对文件调用
close
方法,只是对它们进行命名。如果要实际关闭文件,则需要
f2.close()
。但是对于
f
,实际上不需要这样做,因为您正在使用的
with
语句将自动关闭文件(您可能应该为
f2
使用
with
,而不必手动执行
close
调用)


似乎也不太需要
内容
成为嵌套列表(外部列表中只有一项)。您可能希望执行
contents=f.readlines()
操作,而不是将行列表追加到最初为空的列表中。这将使您摆脱后面代码中的一个循环。

Python中的Stings是不可变的。一旦创建了字符串对象,就不能对其进行修改。但是,您可以基于旧字符串创建新字符串

当您调用
s.replace
时,它不会就地修改
s
,因为这是不可能的。相反,
str.replace
方法返回一个新字符串。您可以执行
s=s.replace(…)
,它应该可以工作。但是,当您可以将名称重新绑定到新字符串时,将一个字符串的全部内容替换为另一个字符串是没有意义的

我建议使用:

    if s == '#DRESECTION 0\n':
        s = strs
    f2.write(s)
我还更改了
write
调用。这里不需要使用字符串替换,因为您希望编写整个字符串(并且不需要额外的内容)。只需传递
s
作为参数

您的代码还有一些其他小问题:

例如,您没有对文件调用
close
方法,只是对它们进行命名。如果要实际关闭文件,则需要
f2.close()
。但是对于
f
,实际上不需要这样做,因为您正在使用的
with
语句将自动关闭文件(您可能应该为
f2
使用
with
,而不必手动执行
close
调用)

似乎也不太需要
内容
成为嵌套列表(外部列表中只有一项)。您可能希望执行
contents=f.readlines()
操作,而不是将行列表追加到最初为空的列表中。这将使您在后面的代码中摆脱其中一个循环