python - 将项目添加到列表列表 - Python
问题描述
我希望使用此处的代码将域与其 DNS 解析器名称匹配
当前 CSV 输出
domain1 dns1 dns2 dns3 \n domain2 dns1 dns2 dns3 \n etc
这是不正确的格式,因为它将所有域和 dns 解析器添加到同一行,而不是基于新域的新行。由于换行符,它们仅由空白单元格分隔。相反,我希望将其编写如下,其中每个域及其 dns 解析器都写入各自的行。
预期的 CSV 输出:
domain1 dns1 dns2 dns3
domain2 dns1 dns2 dns3
domain3 dns1 dns2 dns3
etc...
我希望以正确的格式写出 CSV 文件,并且使用我拥有的代码,每次将域传递给 def dns_resolver 时,它都应该迭代到新的列表索引。这样,每个域及其 dns 解析器都有自己的列表,因此在写入新的 CSV 文件时,每个域都将打印在 CSV 文件中它自己的行中。
代码没有正确地遍历列表索引,因此没有将域及其 dns 名称添加到任何列表中。当它们全部写入同一个列表时,它工作正常,但它们全部写入同一行,这是不正确的。因此,我将不使用 1 个列表,而是使用列表列表,并将每个列表写入自己的列表,然后将每个列表写入 csv 文件,以便它们在自己的行中。通常,域会从 csv 文件中读取到列表中,但为此,我输入了 3 个值。
import dns.resolver
import csv
import os
from os.path import dirname, abspath
r = 0
def dns_resolver(domain):
server = []
resolvers = []
try:
resolvers = dns.resolver.resolve(domain, 'NS')
#dns_list.append(domain)
for x in resolvers:
#dns_list.append(x.target)
#dns_list.append('\n')
server.append(str(x.target))
except:
server.append('did not resolve')
finally:
return (domain, *server)
# Read in all domains from csv file domains.csv & count how many domains there are listed
domain_list = ['google.com', 'facebook.com', 'github.com']
domain_amount = 0
with open(domainFName, 'r') as file:
for line in csv.reader(file):
name = (line)
domain_list.append(line)
domain_amount += 1
for first_domain in domain_list:
for x in first_domain:
outputWriter.writerow(dns_resolver(x))
解决方案
- 您可以简单地让您的dns_resolver函数返回给定域的列表。
- 这
*server
是将每个项目附加到列表中的简写。 - 使用列表理解,将所有列表收集到要写入 CSV的列表列表中。
def dns_resolver(domain):
# do your dns resolution
# server = dns.resolver.resolve(domain, 'NS')
server = ["dns1", "dns2", "dns3", "dns4"]
return [domain, *server]
# Read in all domains
domain_list = ['google.com', 'facebook.com', 'github.com']
print([dns_resolver(d) for d in domain_list])
输出:
[
['google.com', 'dns1', 'dns2', 'dns3', 'dns4'],
['facebook.com', 'dns1', 'dns2', 'dns3', 'dns4'],
['github.com', 'dns1', 'dns2', 'dns3', 'dns4']
]
推荐阅读
- jenkins - Jenkins 的 Stage View 插件中蓝色时间条的含义
- tkinter - 努力在 tkiner 文本小部件中绑定标签
- java - Apache Camel 路由不调用处理器
- mysql - 如何从 docker 访问数据库?
- package - Buildroot 中的 postGIS 安装问题
- ios - Cocoapods:无法从 Swift pod 访问 Obj-C pod
- agda - 教类型检查器 2 ^ e ≢ 0
- r - How to choose the "family" on gbm.step?
- typo3 - 如何从 hreflang 中删除 TYPO3 9 SEO 扩展中的区域
- windows - Assigning a UCC Cert to multiple domains that all reside on a single Dedicated Server via IIS?