原需求:将 具有801 行的每行一个单元格的表格结构(每个单元格内容较少),调整为每行4个单元格,进而缩减为201行,将信息集中一些。
原样式为:
调整后,效果为:
处理前部分数据:
<tr><td>am-icon-bluetooth</td><td ><i class="am-icon-bluetooth"></i></td></tr>
<tr><td>am-icon-bluetooth-b</td><td ><i class="am-icon-bluetooth-b"></i></td></tr>
<tr><td>am-icon-codiepie</td><td ><i class="am-icon-codiepie"></i></td></tr>
<tr><td>am-icon-credit-card-alt</td><td ><i class="am-icon-credit-card-alt"></i></td></tr>
处理后部分数据:
<tr>
<td>am-icon-bluetooth</td><td ><i class="am-icon-bluetooth"></i></td>
<td>am-icon-bluetooth-b</td><td ><i class="am-icon-bluetooth-b"></i></td>
<td>am-icon-codiepie</td><td ><i class="am-icon-codiepie"></i></td>
<td>am-icon-credit-card-alt</td><td ><i class="am-icon-credit-card-alt"></i></td>
</tr>
唯一需要适当调整的是:(当前为从第一个不保留,若想保留第一个,就将 i + 1,换成i,即 if i % 4 == 0 )
# 判断是否是每第4次出现
if (i + 1) % 4 == 0:
原代码:
import re
def replace_every_4th_occurrence(input_file, output_file, target_string, replacement_string):
# 读取文件内容
with open(input_file, 'r', encoding='utf-8') as file:
content = file.read()
# 使用正则表达式查找所有目标字符串的位置
matches = list(re.finditer(re.escape(target_string), content))
# 创建一个新的字符串列表用于构建修改后的内容
new_content_parts = []
last_index = 0
for i, match in enumerate(matches):
# 获取当前匹配的开始和结束索引
start, end = match.start(), match.end()
# 提取当前匹配之前的部分
new_content_parts.append(content[last_index:start])
# 判断是否是每第4次出现
if (i + 1) % 4 == 0:
# 保留该匹配项
new_content_parts.append(replacement_string)
else:
# 替换为其他内容(例如空字符串或其他占位符)
new_content_parts.append('')
# 更新最后一个索引
last_index = end
# 添加文件末尾剩余的部分
new_content_parts.append(content[last_index:])
# 合并所有部分形成新的内容
new_content = ''.join(new_content_parts)
# 将修改后的内容写入到输出文件
with open(output_file, 'w', encoding='utf-8') as file:
file.write(new_content)
# 示例使用
input_file = 'input.txt'
output_file = 'output.txt'
target_string = 'your_target_string'
replacement_string = 'your_replacement_string'
replace_every_4th_occurrence(input_file, output_file, target_string, replacement_string)
微调后,完整的为:
import re
def replace_every_4th_occurrence(input_file, output_file, target_string, replacement_string, start_index):
# 读取文件内容
with open(input_file, 'r', encoding='utf-8') as file:
content = file.read()
# 使用正则表达式查找所有目标字符串的位置
matches = list(re.finditer(re.escape(target_string), content))
# 创建一个新的字符串列表用于构建修改后的内容
new_content_parts = []
last_index = 0
for i, match in enumerate(matches):
# 获取当前匹配的开始和结束索引
start, end = match.start(), match.end()
# 提取当前匹配之前的部分
new_content_parts.append(content[last_index:start])
# 判断是否是每第4次出现
if (i + start_index) % 4 == 0:
# 保留该匹配项
new_content_parts.append(replacement_string)
else:
# 替换为其他内容(例如空字符串或其他占位符)
new_content_parts.append('')
# 更新最后一个索引
last_index = end
# 添加文件末尾剩余的部分
new_content_parts.append(content[last_index:])
# 合并所有部分形成新的内容
new_content = ''.join(new_content_parts)
# 将修改后的内容写入到输出文件
with open(output_file, 'w', encoding='utf-8') as file:
file.write(new_content)
# 示例使用
input_file = 'input.txt'
output_file = 'mid.txt'
target_string = '</tr>'
replacement_string = '</tr>'
# 第一步,替换掉 </tr>
replace_every_4th_occurrence(input_file, output_file, target_string, replacement_string, 1)
input_file = 'mid.txt'
output_file = 'output.txt'
target_string = '<tr>'
replacement_string = '<tr>'
# 再对,上面所得结果,进一步替换掉 <tr>
replace_every_4th_occurrence(input_file, output_file, target_string, replacement_string, 0)
感悟:试用了 “库克AI”、“豆包”、“文心一言”,发现 “文心一言”效果最好!