正天圣人 发表于 2021-6-6 22:59:19

关于打开方式

大佬们,我知道第二行有问题,请问怎么改?

suchocolate 发表于 2021-6-6 23:07:51

open不写打开方式默认是只读

正天圣人 发表于 2021-6-6 23:08:57

suchocolate 发表于 2021-6-6 23:07
open不写打开方式默认是只读

所以第二行应该怎么改啊?大佬

Twilight6 发表于 2021-6-6 23:14:05


你可以重新打开一次文件,以 'w' 模式覆盖之前的文件,并且将替换后的字符写入该文件即可

另外建议拷贝代码发问题,这样可以直接帮你更改代码

正天圣人 发表于 2021-6-6 23:15:25

Twilight6 发表于 2021-6-6 23:14
你可以重新打开一次文件,以 'w' 模式覆盖之前的文件,并且将替换后的字符写入该文件即可

另外建议拷 ...

不行,一'w'写入,之前的东西就没了,我需要替换,而不是直接输入

Twilight6 发表于 2021-6-6 23:16:35

正天圣人 发表于 2021-6-6 23:15
不行,一'w'写入,之前的东西就没了,我需要替换,而不是直接输入


你把你的代码发上来,我叙述的感觉你并没有理解

是重新写一个 open ,不是在第一个上直接改成 w

正天圣人 发表于 2021-6-6 23:18:29

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()

正天圣人 发表于 2021-6-6 23:19:27

Twilight6 发表于 2021-6-6 23:16
你把你的代码发上来,我叙述的感觉你并没有理解

是重新写一个 open ,不是在第一个上直接改成 w

重新写,怎么写?大佬可以说的明白一些吗?

Twilight6 发表于 2021-6-6 23:24:49

正天圣人 发表于 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)

Twilight6 发表于 2021-6-6 23:26:51

正天圣人 发表于 2021-6-6 23:19
重新写,怎么写?大佬可以说的明白一些吗?



计数直接用 count 函数,替换直接用 replace 函数

最后将替换后的字符串重新 open 写入原先的文件,因为 w 模式打开会覆盖原文件,所以直接写入即是替换后的文本内容

正天圣人 发表于 2021-6-6 23:28:34

Twilight6 发表于 2021-6-6 23:24


可是大佬,这样写文件就没有了

Twilight6 发表于 2021-6-6 23:29:30

正天圣人 发表于 2021-6-6 23:28
可是大佬,这样写文件就没有了



我代码最后忘记关闭文件对象了,加上 result.close()

正天圣人 发表于 2021-6-6 23:33:47

Twilight6 发表于 2021-6-6 23:29
我代码最后忘记关闭文件对象了,加上 result.close()

可以了,谢谢大佬!

suchocolate 发表于 2021-6-6 23:35:08

给你个参考,文本替换还是用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()

正天圣人 发表于 2021-6-6 23:36:55

suchocolate 发表于 2021-6-6 23:35
给你个参考,文本替换还是用re方面。

好的,谢谢
页: [1]
查看完整版本: 关于打开方式