通过python将数据写入文本文件

时间:2017-05-23 10:29:56

标签: python python-3.x

我编写了一个脚本来从日志文件中分割IP:

f = open("list.LOG" , "r" , encoding="utf8")
x = f.readlines()[6:99]
for i in x:                                  
    y = i.split(",")[4].split(":")[0]                      
    print(y)

f.close()

out put:

168.62.187.180
168.62.187.180
168.62.187.180
168.62.187.180
113.23.50.88
113.23.50.88
113.23.50.88
113.23.50.88
137.135.120.84
137.135.120.84
137.135.120.84
137.135.120.84

我想删除重复的IP并写入文件" IP.txt"但是我没有想法。有人可以帮忙吗?谢谢

2 个答案:

答案 0 :(得分:2)

有点解释:

你的第一个问题是,

  

我想删除重复的IP?

在这里,您可以在列表中使用set(),但是您的要求是保持唯一项目的顺序,因此set(x)不是一个好主意。

你能做的是,

  • 取一个列表/设置
  • 在每次迭代中,检查当前ip是否在上面的列表/ set
  • 如果存在,则跳过ip
  • 如果没有,则添加它,并将ip写入输出文件。

你的第二个问题是,

  

如何将它们写入文件?

这更简单,你知道如何打开/关闭你的文件,所以你必须知道的是你如何编写内容。使用f.write(content)其中f是文件对象。

试试这个:

f1 = open("list.LOG" , "r" , encoding="utf8")
x = f1.readlines()[6:99]

f1.close()

f2 = open("result.txt" , "a+" , encoding="utf8")

result = set()

for i in x:                                  
    y = i.split(",")[4].split(":")[0]                      
    if y not in result:
        result.add(y)
        f.write(y + '\n')
f2.close()

我会像下面那样重构代码:

with open("list.LOG" , "r" , encoding="utf8") as f1, 
         open("result.txt" , "a+" , encoding="utf8") as f2:

    result = set()
    x = f.readlines()[6:99]
    for i in x:                                  
        y = i.split(",")[4].split(":")[0]                      
        if y not in result:
            result.add(y)
            f.write(y + '\n')  

在打开文件时使用with将关闭文件本身,因此您无需显式关闭它。

它有一个奇特的名字Context Manager

答案 1 :(得分:1)

result = list(set(y))

如果您想保留订单:

result = []
seen = set()
for i in y:
    if i not in seen:
        result.append(i)
        seen.add(i)

然后将列表写入文件。

with open("IP.txt" , "a+" , encoding="utf8") as f:    
    f.write('\n'.join(result))