关于打开方式
大佬们,我知道第二行有问题,请问怎么改? open不写打开方式默认是只读 suchocolate 发表于 2021-6-6 23:07open不写打开方式默认是只读
所以第二行应该怎么改啊?大佬
你可以重新打开一次文件,以 'w' 模式覆盖之前的文件,并且将替换后的字符写入该文件即可
另外建议拷贝代码发问题,这样可以直接帮你更改代码
Twilight6 发表于 2021-6-6 23:14
你可以重新打开一次文件,以 'w' 模式覆盖之前的文件,并且将替换后的字符写入该文件即可
另外建议拷 ...
不行,一'w'写入,之前的东西就没了,我需要替换,而不是直接输入 正天圣人 发表于 2021-6-6 23:15
不行,一'w'写入,之前的东西就没了,我需要替换,而不是直接输入
你把你的代码发上来,我叙述的感觉你并没有理解
是重新写一个 open ,不是在第一个上直接改成 w Twilight6 发表于 2021-6-6 23:16
你把你的代码发上来,我叙述的感觉你并没有理解
是重新写一个 open ,不是在第一个上直接改成 w
wen=input('请输入文件名')
a=open(wen,encoding='utf-8')
b=a.read()
ci=0
ci1=0
b=str(b)
x=input('请输入需要替换的单词或字符:')
y=input('请输入新的单词或字符:')
for i in b:
if i==x:
ci=ci+1
print('\n文件%s中共有%d个【%s】' % (wen,ci,x))
print('您确定要把所有的【%s】替换为【%s】吗?' % (x,y))
z=input('【YES/NO】')
if z=='yes':
for i in b:
if i==x:
y=b
ci=ci+1
a.writelines(b)
print(a)
a.close() Twilight6 发表于 2021-6-6 23:16
你把你的代码发上来,我叙述的感觉你并没有理解
是重新写一个 open ,不是在第一个上直接改成 w
重新写,怎么写?大佬可以说的明白一些吗? 正天圣人 发表于 2021-6-6 23:19
重新写,怎么写?大佬可以说的明白一些吗?
wen = input('请输入文件名')
a = open(wen, encoding='utf-8').read()
x = input('请输入需要替换的单词或字符:')
y = input('请输入新的单词或字符:')
ci = a.count(x)
print('\n文件%s中共有%d个【%s】' % (wen, ci, x))
print('您确定要把所有的【%s】替换为【%s】吗?' % (x, y))
z = input('【YES/NO】')
if z == 'yes' or z == 'YES':
a = a.replace(x,y)
result = open(wen, 'w', encoding='utf-8')
result.write(a) 正天圣人 发表于 2021-6-6 23:19
重新写,怎么写?大佬可以说的明白一些吗?
计数直接用 count 函数,替换直接用 replace 函数
最后将替换后的字符串重新 open 写入原先的文件,因为 w 模式打开会覆盖原文件,所以直接写入即是替换后的文本内容
Twilight6 发表于 2021-6-6 23:24
可是大佬,这样写文件就没有了 正天圣人 发表于 2021-6-6 23:28
可是大佬,这样写文件就没有了
我代码最后忘记关闭文件对象了,加上 result.close()
Twilight6 发表于 2021-6-6 23:29
我代码最后忘记关闭文件对象了,加上 result.close()
可以了,谢谢大佬! 给你个参考,文本替换还是用re方面。import re
import os
def ckfile(file):
if os.path.exists(file):
return True
else:
print(f'{file}不存在!')
exit(1)
def FileToStr(file):
with open(file, encoding='utf-8') as f:
return f.read()
def StrToFile(str, file):
with open(file, 'w', encoding='utf-8') as f:
f.write(str)
def main():
file = input('请输入文件名:')
oldwd = input('请输入要替换的单词:')
newwd = input('请输入新的单词:')
ckfile(file)
temp_str = FileToStr(file)
on = re.findall(oldwd, temp_str)
if on:
print(f'{file}中共有{len(on)}个{oldwd}。')
ry = input('是否替换?Y/N:')
if ry in ['y', 'Y']:
result = re.sub(oldwd, newwd, temp_str)
StrToFile(result, file)
print('替换完成!')
else:
print('已取消替换!')
else:
print(f'{file}没有{oldwd}这个词。')
exit(1)
if __name__ == "__main__":
main() suchocolate 发表于 2021-6-6 23:35
给你个参考,文本替换还是用re方面。
好的,谢谢
页:
[1]