You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表值修改:将哈希列表第二列统一替换为指定名称

批量替换哈希列表中的文件名统一为App1

需求说明

我有如下格式的哈希列表(存储在md5sum.txt文件中):

f71bc81a7e7d649f0d279b5861972eae ./.bash_history
22bfb8c1dd94b5f3813a2b25da67463f ./.bash_logout
1f98b8f3f3c8f8927eca945d59dcc1c6 ./.bashrc
f4e81ade7d6f9fb342541152d08e7a97 ./.profile
595dbcceb1b5921f7fad73ad17ec1fe4 ./.python_history
a23829cea89e42d79df01428e550191a ./.viminfo

需要将所有第二列的文件名替换为统一名称App1,处理后预期效果:

f71bc81a7e7d649f0d279b5861972eae App1
22bfb8c1dd94b5f3813a2b25da67463f App1
1f98b8f3f3c8f8927eca945d59dcc1c6 App1
f4e81ade7d6f9fb342541152d08e7a97 App1
595dbcceb1b5921f7fad73ad17ec1fe4 App1
a23829cea89e42d79df01428e550191a App1

我尝试过切片、遍历修改值,但未得到预期结果。以下是我尝试的代码:

import re
f = open("md5sum.txt","r")
read = f.read()
ar = re.sub(r"\s+", "", read)
splitting = ar.split('.')
print(splitting[1])
for x in range(len(splitting)):
    if splitting[x] % 2 != 0:
        print("App1")

希望能得到相关解决帮助,谢谢。


问题分析

你的代码思路出现了几个关键问题:

  1. 用re.sub(r"\s+", "", read)把所有空格都去掉了,这直接破坏了每行哈希和文件名的分隔结构,导致后续无法正确区分哈希值和文件名。
  2. 用.分割整个字符串的方式完全不符合原始数据的格式逻辑,原始数据是每行一条记录,应该按行处理而非全局分割。
  3. 循环中用splitting[x] % 2 != 0尝试判断奇偶索引,但splitting[x]是字符串,不能用取模运算,这会直接抛出类型错误。

解决方案

这里提供几种简单高效的实现方式:

方法1:逐行分割替换(最直观)

读取文件的每一行,按空格分割出哈希值,然后拼接上App1即可:

# 打开文件并逐行处理
with open("md5sum.txt", "r") as f:
    for line in f:
        # 去除行尾换行符,按空格分割(默认分割任意数量的空格)
        parts = line.strip().split()
        # 取第一个元素(哈希值),拼接App1后打印
        if parts:  # 跳过空行
            print(f"{parts[0]} App1")

方法2:正则表达式替换(适合复杂格式)

用正则匹配每行中哈希值之后的所有内容,替换为App1:

import re

with open("md5sum.txt", "r") as f:
    content = f.read()
    # 正则匹配:开头的哈希值(32位十六进制)+ 后面的任意内容,替换为哈希值 + App1
    result = re.sub(r"^([0-9a-fA-F]{32})\s+.+$", r"\1 App1", content, flags=re.MULTILINE)
    print(result)
  • 正则说明:^([0-9a-fA-F]{32})匹配行首的32位MD5哈希值并捕获,\s+.+$匹配哈希值后的所有内容;替换时用\1引用捕获的哈希值,拼接App1。
  • flags=re.MULTILINE让^和$匹配每行的开头和结尾。

方法3:写入新文件(如果需要保存结果)

如果需要将处理后的内容保存到新文件,而不是仅打印,可以这样做:

with open("md5sum.txt", "r") as infile, open("md5sum_modified.txt", "w") as outfile:
    for line in infile:
        parts = line.strip().split()
        if parts:
            outfile.write(f"{parts[0]} App1\n")

内容的提问来源于stack exchange,提问作者js352

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:49:27