python - 匹配字符串和替换

时间:2014-07-08 10:24:04

标签: python

我有一个文件,我试图用另一个单词替换部分行。

它看起来像bobkeiser:bob123@bobscarshop.com:0.0.0.0.0:23rh32o3hro2rh2:234212

我需要删除除bob123@bobscarshop.com之外的所有内容,但我需要将23rh32o3hro2rh2与23rh32o3hro2rh2:poniacvibe匹配,来自不同的文本文件并放置在bob123@bobscarshop.com前面的poniacvibe

所以它看起来像这样bob123@bobscarshop.com:ponicacibe

我很难尝试这样做,但我想我必须拆分bobkeiser:bob123@bobscarshop.com:0.0.0.0.0:23rh32o3hro2rh2:234212 with data.split(“: “),但有些线条中有一个(:),我不希望分割线,如果这有任何意义......

如果有人能提供帮助,我会非常感激。

1 个答案:

答案 0 :(得分:3)

好吧,它看起来就像你使用冒号:分开你的字符串。

在这种情况下,您可以使用.split(":")将字符串分解为其组件子字符串

例如:

firststring = "bobkeiser:bob123@bobscarshop.com:0.0.0.0.0:23rh32o3hro2rh2:234212"
print(firststring.split(":"))

会给:

['bobkeiser', 'bob123@bobscarshop.com', '0.0.0.0.0', '23rh32o3hro2rh2', '234212']

并假设您的子字符串将始终采用相同的顺序,然后您可以执行主字符串中相同数量的子字符串:

firststring = "bobkeiser:bob123@bobscarshop.com:0.0.0.0.0:23rh32o3hro2rh2:234212"
firstdata = firststring.split(":")

secondstring = "23rh32o3hro2rh2:poniacvibe"
seconddata = secondstring.split(":")

if firstdata[3] == seconddata[0]:
    outputdata = firstdata
    outputdata.insert(1,seconddata[1])
    outputstring = ""
    for item in outputdata:
        if outputstring == "":
            outputstring = item
        else
            outputstring = outputstring + ":" + item

这是做什么的:

  1. 将字符串的位提取到列表中
  2. 看看" 23rh32o3hro2rh2"字符串可以在第二个列表中找到
  3. 找到第二个列表的相应部分
  4. 创建一个列表以包含输出数据并将第一个列表放入其中
  5. 插入" poniacvibe"字符串之前" bob123@bobscarshop.com"
  6. 使用冒号作为分隔符
  7. 将outputdata列表拼接回字符串

    你的字符串需要长度相同的原因是因为索引用于查找相关字符串而不是尝试使用某种形式的字符串类型匹配(这会变得更加复杂)

    如果您可以将数据保存在此表单中,则会变得更加简单。

    为防止格式错误的数据(列表太短),您可以在开始使用len(list)之前显式测试它们,以查看其中有多少元素。

    或者你可以让它运行并捕获异常,但是在这种情况下你可能会得到意想不到的结果,因为它可能会尝试匹配列表中的错误元素。

    希望这会有所帮助

    詹姆斯

    编辑: 好的,如果你想从文件中找到一长串字符串,你可能会想要一些东西:

    firstfile = open("firstfile.txt", mode = "r")
    secondfile= open("secondfile.txt",mode = "r")
    
    first_raw_data = firstfile.readlines()
    firstfile.close()
    
    second_raw_data = secondfile.readlines()
    secondfile.close()
    
    first_data = []
    for item in first_raw_data:
        first_data.append(item.replace("\n","").split(":"))
    
    second_data = []
    for item in second_raw_data:
        second_data.append(item.replace("\n","").split(":"))
    
    output_strings = []
    for item in first_data:
        searchstring = item[3]
        for entry in second_data:
            if searchstring == entry[0]:
                output_data = item
                output_string = ""
                output_data.insert(1,entry[1])
                for data in output_data:
                    if output_string == "":
                        output_string = data
                    else:
                        output_string = output_string + ":" + data
                output_strings.append(output_string)
                break
    
    for entry in output_strings:
        print(entry)
    

    这应该达到你所追求的目标,并且随着概念证明将为你打印出结果列表。

    如果您有任何问题,请随时提出。

    詹姆斯

    第二次编辑: 要将此结果输出到文件中,请将最后两行更改为:

    outputfile = open("outputfile.txt", mode = "w")
    for entry in output_strings:
        outputfile.write(entry+"\n")
    outputfile.close()