请PYTHON大神指点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请PYTHON大神指点?相关的知识,希望对你有一定的参考价值。

有一个批量修改文本文档的代码,可以正常修改内容。但是如果没有可修改内容时,文本文档会被清空,请问代码错在哪?
代码如下:
"""
这个脚本用于批量修改文件内容,比如批量修改文件中的链接,每次仅可以修改一处内容
"""
import os
import re
import sys

mark_url = input('请输入文件所在的文件夹地址:')
modify_it = input('请输入被修改的部分:')
want_it = input('请输入你想修改成的内容:')
par = re.compile(modify_it)
modify_list = [] # 可修改文件名的列表
file_list = os.listdir(mark_url) # 待修改文件夹
print("修改前:\n" + str(file_list)) # 输出文件夹中包含的文件
current_path = os.getcwd() # 得到进程当前工作目录
os.chdir(mark_url) # 将当前工作目录修改为待修改文件夹的位置

for filename in file_list:
with open(filename, 'r', encoding='utf-8') as f:
content = f.read()
with open(filename, 'w', encoding='utf-8') as f:
# 查看文件是否相匹配
if modify_it in content:
modify_list.append(filename)
# 替换文件内容
file = par.sub(want_it, content)
f.write(file)

if modify_list:
print('可修改的文件名为:\n', modify_list)
print('修改完毕!')
else:
print('没有可以修改的文件!')

set1=set(modify_list)
print('共修改文件:',len(set1),'个!')

os.chdir(current_path) # 改回程序运行前的工作目录
sys.stdin.flush() # 刷新

os.system("pause")

参考技术A 第二个 with 要等到检测到需要修改之后再打开文件,因为 w 模式会自动清空文本内容。追问

请问可有改进方法?不清空文本内容

追答

理论上让你自己思考可能会更理想一些,因为这个逻辑恰恰很简单。
我先说结果:
with open(filename, 'w', encoding='utf-8') as f:
if modify_it in content:
这两行互换(注意缩进),大概就能符合你想要的效果。
-------------------------------------------------------------------------
如果我自己在面对你这种需求的时候,可能会多一种思路:
第一种,和你所思考的一样,先用 r 模式打开文件,读取出其内容。判断是否存在需要替换的地方,有的话再用 w 模式打开文件,整体替换结果。目的能达到,思路也足够简单。不足之处大概是需要两次打开文件的操作。
第二种,用 a (可能是 a 模式的一种)模式打开文件,将光标移到最前,读取所有文件内容。判断是否有需要修改的,有的话,将文件清空,将修改后的文本填入其中。这种方式的好处就是只有一次 io 读取。坏处就是逻辑相对麻烦一些。我觉得这种思路大概率也是可行的,印象中以前试过。不过还是以实际操作为准。

追问

非常感谢!按你说的试了一下,还是不可行,这样会导致后面的 f.write(file) 报错。

本回答被提问者采纳

无界鼠标总是连接不上。请大神们指点。

提示不知道这样的主机,多次链接不上!是公司电脑,应该是在一个局域网下。需要更改那些设置或是配置,是否需要把两台电脑的IP改一样的地址段?怎么改?网络里面互相看不到对方电脑。下载无界鼠标(mouse without borders)软件,然后每台电脑都需要安装,有鼠标的电脑为服务端,被控制的电脑为客户端在服务端上安装无界鼠标后,运行时,选择NO进入下一步记录服务端的安全码和计算机名在客户端安装后,选择Yes输入服务端的安全码和计算机名点LINK连接服务端电脑,等连接成功后。 就是到这步多次连接不上了,(电脑提示:不知道这样的主机)

无线鼠标哈,有个接收器插机器上usb口,鼠标上有个对码的开关,按一下,等会就可以用了啦。
但是无界鼠标什么意思,
参考技术A 网段是必须一致。网段不一致搞毛。
192.168.1.X
前面必须一致,X必须不一致。

以上是关于请PYTHON大神指点?的主要内容,如果未能解决你的问题,请参考以下文章

求大神指点 vb.net 的 FlowLayoutPanel1 怎么才能自由排列位置呢?

Navicat for MySQL怎么破解啊?急求。大神指点

php递归的问题,请大神门指点

用modelsim时报错,请大神指点,(主要看一下模块调用和参数配置的语法有问题吗?)

编了一套爬虫美女图的一组代码,请大神指点一二;

idea运行下面代码,报错,请哪位大神指点下