Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何改革Python列表并逐行打印?_Python_List_Dictionary - Fatal编程技术网

Python:如何改革Python列表并逐行打印?

Python:如何改革Python列表并逐行打印?,python,list,dictionary,Python,List,Dictionary,我有这样一个文件: 2.nseasy.com.|['azeaonline.com'] ns1.iwaay.net.|['alchemistrywork.com', 'dha-evolution.biz', 'hidada.net', 'sonifer.biz'] ns2.hd28.co.uk.|['networksound.co.uk'] 预期结果: 2.nseasy.com.|'azeaonline.com' ns1.iwaay.net.|'alchemistrywork.com' ns1.

我有这样一个文件:

2.nseasy.com.|['azeaonline.com']
ns1.iwaay.net.|['alchemistrywork.com', 'dha-evolution.biz', 'hidada.net', 'sonifer.biz']
ns2.hd28.co.uk.|['networksound.co.uk']
预期结果:

2.nseasy.com.|'azeaonline.com'
ns1.iwaay.net.|'alchemistrywork.com'
ns1.iwaay.net.|'dha-evolution.biz'
ns1.iwaay.net.|'hidada.net'
ns1.iwaay.net.|'sonifer.biz'
ns2.hd28.co.uk.|'networksound.co.uk'
当我尝试这样做时,我得到的是域的字符,而不是值域的项。这意味着字典d的值中的列表被识别为列表,而不是字符串。以下是我的代码:

d = defaultdict(list)
f = open(file,'r')
start = time()
for line in f:
    NS,domain_list = line.split('|')
    s = json.dumps(domain_list)
    d[NS] = json.loads(s)


for NS, domains in d.items():
    for domain in domains:
        print (NS, domain)
当前结果的示例:

w
o
o
d
l
a
n
d
f
a
r
m
e
r
s
m
a
r
k
e
t
.
o
r
g
'
]

您使用json所做的操作是不正确的
s=json.dumps(域列表)
将列表转储为字符串
s
json.loads(s)
再次读取字符串,然后您在字符串的范围内移动并打印它,从而在输出中显示单个字符。 尝试以下方法:

d = defaultdict(list)
f = open(file,'r')
start = time()
for line in f:
    NS,domain_list = line.split('|')
    d[NS] = json.loads(domain_list.replace("'", '"'))


for NS, domains in d.items():
    for domain in domains:
        print (NS, domain)

您使用json所做的操作是不正确的
s=json.dumps(域列表)
将列表转储为字符串
s
json.loads(s)
再次读取字符串,然后您在字符串的范围内移动并打印它,从而在输出中显示单个字符。 尝试以下方法:

d = defaultdict(list)
f = open(file,'r')
start = time()
for line in f:
    NS,domain_list = line.split('|')
    d[NS] = json.loads(domain_list.replace("'", '"'))


for NS, domains in d.items():
    for domain in domains:
        print (NS, domain)
下面是另一个(假设names.txt包含您的数据):

注意:您也可以用parts|a=json.load(parts)替换第4行和第5行,假设|后面的部分是json…

这里是另一行(假设names.txt包含您的数据):


注意:您也可以用parts|a=json.loads(parts)替换第4行和第5行,假设|后面的部分是json…

您不需要使用
json
在这种情况下,因为它不能解决您的问题,您可以使用和在列表理解中创建愿望对:

>>> from itertools import repeat
>>> import ast
>>> sp_l=[(i.split('|')[0],ast.literal_eval(i.split('|')[1])) for i in s.split('\n')]
>>> for k in [zip(repeat(i,len(j)),j) for i,j in sp_l]:
...    for item in k:
...         print '|'.join(item)
... 
2.nseasy.com.|azeaonline.com
ns1.iwaay.net.|alchemistrywork.com
ns1.iwaay.net.|dha-evolution.biz
ns1.iwaay.net.|hidada.net
ns1.iwaay.net.|sonifer.biz
ns2.hd28.co.uk.|networksound.co.uk

在这种情况下,您不需要使用
json
,因为它不能解决您的问题,您可以在列表中使用和来创建愿望对:

>>> from itertools import repeat
>>> import ast
>>> sp_l=[(i.split('|')[0],ast.literal_eval(i.split('|')[1])) for i in s.split('\n')]
>>> for k in [zip(repeat(i,len(j)),j) for i,j in sp_l]:
...    for item in k:
...         print '|'.join(item)
... 
2.nseasy.com.|azeaonline.com
ns1.iwaay.net.|alchemistrywork.com
ns1.iwaay.net.|dha-evolution.biz
ns1.iwaay.net.|hidada.net
ns1.iwaay.net.|sonifer.biz
ns2.hd28.co.uk.|networksound.co.uk

下面是一个正则表达式解决方案:

import re

input = '''2.nseasy.com.|['azeaonline.com']
ns1.iwaay.net.|['alchemistrywork.com', 'dha-evolution.biz', 'hidada.net', 'sonifer.biz']
ns2.hd28.co.uk.|['networksound.co.uk']'''

for line in input.split('\n'):
    splitted = line.split('|')
    left = splitted[0]
    right = re.findall("'([a-z\.-]+?)'", splitted[1])

    for domain in right:
        print '{0}|{1}'.format(left, domain)
产出:

2.nseasy.com.|azeaonline.com
ns1.iwaay.net.|alchemistrywork.com
ns1.iwaay.net.|dha-evolution.biz
ns1.iwaay.net.|hidada.net
ns1.iwaay.net.|sonifer.biz
ns2.hd28.co.uk.|networksound.co.uk

下面是一个正则表达式解决方案:

import re

input = '''2.nseasy.com.|['azeaonline.com']
ns1.iwaay.net.|['alchemistrywork.com', 'dha-evolution.biz', 'hidada.net', 'sonifer.biz']
ns2.hd28.co.uk.|['networksound.co.uk']'''

for line in input.split('\n'):
    splitted = line.split('|')
    left = splitted[0]
    right = re.findall("'([a-z\.-]+?)'", splitted[1])

    for domain in right:
        print '{0}|{1}'.format(left, domain)
产出:

2.nseasy.com.|azeaonline.com
ns1.iwaay.net.|alchemistrywork.com
ns1.iwaay.net.|dha-evolution.biz
ns1.iwaay.net.|hidada.net
ns1.iwaay.net.|sonifer.biz
ns2.hd28.co.uk.|networksound.co.uk
尝试:

甚至只是:

with open('file.xyz') as f:
    for thing in f:
        q, r = thing.split('|')
        r = ast.literal_eval(r)
        for other in r:
            print '{}|{}'.format(q, other)
尝试:

甚至只是:

with open('file.xyz') as f:
    for thing in f:
        q, r = thing.split('|')
        r = ast.literal_eval(r)
        for other in r:
            print '{}|{}'.format(q, other)

芬茨。你的一个例子是如何产生
woodlandfarmers
?这里一定有严重的错误-可能是您给我们的输入…
dumps
紧接着
loads
没有任何作用,它只返回原始值。它不是有效的json btw。它是单引号.Funnz。你的一个例子是如何产生
woodlandfarmers
?这里一定有严重错误-可能是您给我们的输入…
dumps
紧接着
loads
没有任何作用,它只返回原始值。它不是有效的json btw。它是单引号。如果您在回答中看到您认为是错误的内容,请向作者发表评论。如果你在回答中看到一些你认为是错误的东西,请向作者发表评论。