大神来解答
原程序替换正常,但是是改写原文件def Modify_String_TXT(Find_String, Replace_String, input_file):
with open(input_file, 'r+', encoding='UTF-8') as f:
lines = f.readlines()# 读取文件的所有行
lines_to_write = []# 存储要写入文件的行
delete_line = False# 是否删除当前行的标志
previous_line = None# 上一行内容
for line in lines:
if Find_String in line:
line = line.replace(Find_String, Replace_String)
if line.strip().startswith('8'):# 如果行以'8'开头,设置删除标志为True
delete_line = True
elif line.strip().startswith('4'):# 如果行以'4'开头,设置删除标志为True
delete_line = True
else:
if line.strip() == previous_line:# 如果当前行与上一行内容相同,则跳过当前行
continue
lines_to_write.append(line)# 将当前行添加到存储列表中
previous_line = line.strip()# 更新上一行内容为当前行的内容
if delete_line:
lines_to_write = lines_to_write# 如果需要删除行,则将列表的第一行移除
f.seek(0)# 将文件指针移到文件开头
f.truncate()# 清空文件内容
f.writelines(lines_to_write)# 将修改后的行写回文件
input_file = 'f:\\'+input('请输入f盘下要关键字替换的文件名')+'.txt'
Modify_String_TXT(' 0', '0|0', input_file)
Modify_String_TXT(' 3', '0|3', input_file)
Modify_String_TXT(' 6', '1|6', input_file)
修改后新建了新文件,但是没替换,到底错在哪?
def Modify_String_TXT(Find_String, Replace_String, input_file, output_file):
with open(input_file, 'r+', encoding='UTF-8') as f:
lines = f.readlines()# 读取文件的所有行
lines_to_write = []# 存储要写入文件的行
delete_line = False# 是否删除当前行的标志
previous_line = None# 上一行内容
for line in lines:
if Find_String in line:
line = line.replace(Find_String, Replace_String)
if line.strip().startswith('8'):# 如果行以'8'开头,设置删除标志为True
delete_line = True
elif line.strip().startswith('4'):# 如果行以'4'开头,设置删除标志为True
delete_line = True
else:
if line.strip() == previous_line:# 如果当前行与上一行内容相同,则跳过当前行
continue
lines_to_write.append(line)# 将当前行添加到存储列表中
previous_line = line.strip()# 更新上一行内容为当前行的内容
if delete_line:
lines_to_write = lines_to_write# 如果需要删除行,则将列表的第一行移除
with open(output_file, 'w', encoding='UTF-8') as f:
f.writelines(lines_to_write)
input_file = 'f:\\'+input('请输入f盘下要关键字替换的文件名')+'.txt'
output_file = 'f:\\' + input('请输入f盘下要保存的文件名') + '.txt'
Modify_String_TXT(' 0', '0|0', input_file, output_file)
Modify_String_TXT(' 3', '0|3', input_file, output_file)
Modify_String_TXT(' 6', '1|6', input_file, output_file) 你的函数 Modify_String_TXT 在你的第一个示例中是以"原地修改"的形式进行的,即在原始文件中进行字符串替换和行移除操作。而在你的第二个示例中,你在函数中添加了一个新的参数 output_file ,并在读取 input_file 之后,将修改后的内容写入新的文件 output_file 。
问题在于,你在每次调用 Modify_String_TXT 函数时,都会清空输出文件,然后再写入内容。在你的示例中,你调用了三次这个函数,每次调用都会清空输出文件然后再写入。因此,只有最后一次调用的修改会被保留,之前的两次调用修改的内容都会被清空。
为了修复这个问题,你应该在所有修改完成后,只写入一次文件。可以通过将所有的找寻与替换字符串对应关系放在一个字典中,然后在一个单独的函数调用中处理所有的替换,示例如下:
def Modify_String_TXT(Find_Replace_Dict, input_file, output_file):
with open(input_file, 'r+', encoding='UTF-8') as f:
lines = f.readlines()# 读取文件的所有行
lines_to_write = []# 存储要写入文件的行
delete_line = False# 是否删除当前行的标志
previous_line = None# 上一行内容
for line in lines:
for find_str, replace_str in Find_Replace_Dict.items():
if find_str in line:
line = line.replace(find_str, replace_str)
if line.strip().startswith('8'):# 如果行以'8'开头,设置删除标志为True
delete_line = True
elif line.strip().startswith('4'):# 如果行以'4'开头,设置删除标志为True
delete_line = True
else:
if line.strip() == previous_line:# 如果当前行与上一行内容相同,则跳过当前行
continue
lines_to_write.append(line)# 将当前行添加到存储列表中
previous_line = line.strip()# 更新上一行内容为当前行的内容
if delete_line:
lines_to_write = lines_to_write# 如果需要删除行,则将列表的第一行移除
with open(output_file, 'w', encoding='UTF-8') as f:
f.writelines(lines_to_write)
input_file = 'f:\\'+input('请输入f盘下要关键字替换的文件名')+'.txt'
output_file = 'f:\\' + input('请输入f盘下要保存的文件名') + '.txt'
Find_Replace_Dict = {' 0': '0|0', ' 3': '0|3', ' 6': '1|6'}
Modify_String_TXT(Find_Replace_Dict, input_file, output_file)
这样,就可以在一个函数调用中处理所有的字符串替换,并且只写入一次文件,保留了所有的修改内容。 陶远航 发表于 2023-7-22 22:08
在你提供的代码中,存在一个问题。在第一个代码段中,虽然你使用了参数input_file指定了输入文件,但是没有 ...
机器人回答问题? Mike_python小 发表于 2023-7-22 22:08
问题可能出在原始文件未被正确修改的地方。在第一个程序中,你使用了f.seek(0)和f.truncate()来清空文件内 ...
没看出你的代码和我发的修改代码有什么区别?是不是复制错了? isdkz 发表于 2023-7-22 22:08
你的函数 Modify_String_TXT 在你的第一个示例中是以"原地修改"的形式进行的,即在原始文件中进行字符串替 ...
去这个帖子贴一下,也给你最佳https://fishc.com.cn/thread-231173-1-1.html
页:
[1]