我是一名行业的网络工程师,是python的新手,这个问题将应用于路由器的访问列表,但为简单起见,我将使用“州和城市”。
我有几个文本文件(以下两个),其中包含州和城市行,如下所示:
File1
Texas
Austin
Dallas
Houston
San Antonio
File2
Texas
Amarillo
Austin
Dallas
San Antonio
Waco
我需要合并这两个文件,并吐出一个新的文本文件,如下所示:
Texas
Amarillo
Austin
Dallas
Houston
San Antonio
Waco
必须以这样一种方式精确定位:与file2相比,file1缺少Amarillo,并且file2在奥斯汀的顶部具有Amarillo,然后合并的文件在最终文件中将Amarillo置于Austin的顶部或德克萨斯州以下。如果file2与file1相比缺少某些城市,那是另一回事。
我不太确定如何启动此脚本。指导手将不胜感激!
谢谢!
答案 0 :(得分:0)
这是一种简单的方法:
#! /usr/bin/python3
from sys import exit
def w(data, title):
with open('f3.txt', 'w') as file_out:
file_out.write(title + '\n')
for line in data:
file_out.write(line + '\n')
def r(path):
with open(path) as file_in:
lines = file_in.read().split('\n')
return [l for l in lines if l]
def combine(path1, path2):
f1 = r(path1)
f2 = r(path2)
title1 = f1.pop(0)
title2 = f2.pop(0)
# ensure Texas is the first line in each file
if title1 != title2:
print("Titles do not match")
exit()
w(sorted(set(f1 + f2)), title1)
if __name__ == "__main__":
combine('f1.txt', 'f2.txt')
这是运行前后的目录/文件内容:
james@rootVIII:~/Desktop$ ls
delete f1.txt f2.txt test.py utils
james@rootVIII:~/Desktop$
james@rootVIII:~/Desktop$ cat f1.txt
Texas
Austin
Dallas
Houston
San Antonio
james@rootVIII:~/Desktop$
james@rootVIII:~/Desktop$ cat f2.txt
Texas
Amarillo
Austin
Dallas
San Antonio
Waco
james@rootVIII:~/Desktop$
james@rootVIII:~/Desktop$ ./test.py
james@rootVIII:~/Desktop$
james@rootVIII:~/Desktop$
james@rootVIII:~/Desktop$ cat f3.txt
Texas
Amarillo
Austin
Dallas
Houston
San Antonio
Waco
一些注意事项:
这希望“ Texas”或州名成为每个文本文件(f1.txt和f2.txt)中的第一项
将列表变成集合将删除重复项
combin()方法可以接受相对路径或绝对路径
列表推导[l for l in lines if l]
返回一个没有空元素的列表(因为该字符串用换行符分割)...如果在空白处分割,您将得到San而不是San Antonio