|
10鱼币
原程序替换正常,但是是改写原文件
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[1:] # 如果需要删除行,则将列表的第一行移除
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[1:] # 如果需要删除行,则将列表的第一行移除
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[1:] # 如果需要删除行,则将列表的第一行移除
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)
这样,就可以在一个函数调用中处理所有的字符串替换,并且只写入一次文件,保留了所有的修改内容。
|
最佳答案
查看完整内容
你的函数 Modify_String_TXT 在你的第一个示例中是以"原地修改"的形式进行的,即在原始文件中进行字符串替换和行移除操作。而在你的第二个示例中,你在函数中添加了一个新的参数 output_file ,并在读取 input_file 之后,将修改后的内容写入新的文件 output_file 。
问题在于,你在每次调用 Modify_String_TXT 函数时,都会清空输出文件,然后再写入内容。在你的示例中,你调用了三次这个函数,每次调用都会清空输出文件然后再 ...
|