循环Python拆分函数

时间:2013-01-12 18:37:40

标签: python

我正在尝试从文本文件中的大型域名列表中删除子域名。该脚本可以工作,但仅适用于列表中的最后一个域。我知道问题出在循环中,但无法查明extact问题。感谢您的任何帮助:)

with open ("domainlist.txt", "r") as datafile:
s = datafile.read()
for x in s:
    t = '.'.join(s.split('.')[-2:])

print t

这将采用“example.test.com”和“return test.com”。唯一的问题是它不会对列表中的每个域执行此操作 - 只有最后一个域。

3 个答案:

答案 0 :(得分:2)

您在每次循环迭代中覆盖t,因此自然只有最后一次迭代的值保留在t中。 INstead将字符串放在list.append列表中。

答案 1 :(得分:2)

你想要的是建立一个新的列表,通过修改旧列表的元素,幸运的是,Python有the list comprehension - 非常适合这项工作。

with open("domainlist.txt", "r") as datafile:
    modified = ['.'.join(x.split('.')[-2:]) for x in datafile]

这与创建列表并在for循环中向其添加项目完全相同,除了更快更好读取。我建议观看上面链接的视频,了解有关如何使用它们的更多信息。

请注意file.read()将整个内容作为一个大字符串读取,您想要的可能是循环遍历文件的行,这只是通过循环遍历文件本身来完成。您当前的循环是文件的各个字符,而不是行。

答案 2 :(得分:1)

试一试。更好的可读性。

with open ("domainlist.txt", "r") as datafile:
s = datafile.readlines()

t = []

for x in s:
    t.append('.'.join(x.split('.')[-2:]))

print t