将遵循模式的文件读入数组

2024-07-05 14:56:15 发布

您现在位置:Python中文网/ 问答频道 /正文

老板给我分配了一个我不知道如何完成的任务。他需要我建立一个脚本,以便他可以用命令行脚本执行各种DNS管理任务。虽然我不是程序员,但我至少对python有一点了解。在

我不确定哪种方法是完成这项工作的最佳方法。该文件遵循一个非常简单(至少对人类来说)的5行模式。每个条目中唯一更改的部分是域名本身。在

zone "bostire.com" {
        type master;
        allow-transfer {none;};
        file "/etc/bind/zones/bostire.com";
};
zone "caylorscustommolds.com" {
        type master;
        allow-transfer {none;};
        file "/etc/bind/zones/caylorscustommolds.com";
};
zone "contractorsservicesofsek.com" {
        type master;
        allow-transfer {none;};
        file "/etc/bind/zones/contractorsservicesofsek.com";
};

我需要能够有功能,可以添加,删除,和排序这个文件。为了将来对剧本的改进,我想努力做到:

^{pr2}$

在我的想法中,我承认这不是世界上最好的,如果我知道如何将文件读入某种类型的数组中以便对其进行排序,我应该能够使用相同的数组概念来删除。添加将是直接的,在后面调用sort\u entries()来完成。在

我不指望你们这些人给我写整个DAN程序,但是如果你能给我指出正确的方向,或者给我一些想法让我读,那太好了!在


我注意到它似乎没有保存已排序的列表。所以,我开始调查原因。以下是根据Barnacle iu Ed的说明修改的代码:

import re

recordslist = open('/home/bradboy/named.conf.local', 'r+')
myregex = re.compile('^zone.*^\};\n', re.DOTALL | re.MULTILINE)
mylist = myregex.findall(recordslist.read())
mylist.sort()
print len(mylist)
numitems = 0
recordslist.seek(0)
for entry in sorted(mylist):
    recordslist.write(entry)
    numitems += 1
    print numitems
recordslist.truncate()
recordslist.close()

产生以下输出:

bradboy@ns1:~$ python dns.py 
1
1

我做错什么了?在


Tags: 文件remastercomnonezonebindtype
1条回答
网友
1楼 · 发布于 2024-07-05 14:56:15

以下是一些基本的构建块,可以帮助您开始:

1)打开文件进行读写操作

myfile = open('your_filename_here', r+)


2) 使用re.findall()将条目划分为一个列表,其中每个条目以“zone”开头,以“};”结尾

^{pr2}$


3) 要添加、删除和排序,请使用append(), remove(), and sort() functions。注意,您需要一个数组项的精确的内容才能删除它……您可以使用类似的方法巧妙地执行此操作

for entry in mylist:
    if 'string_to_remove' in entry:
        mylist.remove(entry)


4) 最后,当您准备用列表中修改过的内容覆盖旧文件时,从文件的开头开始,写出列表中的所有条目,然后丢弃结果位置之后的所有内容。从a different stackoverflow question

^{4}$



希望这有帮助!在

相关问题 更多 >