Python: 如何读取列表格式的文件?
Python: How can I read a file with format of a list?
我有以下文件 (g)..
-verifiziert.com | [1401832800]
00.pm | [1418511600, 1418598000, 1418943600]
00.re | [1410213600, 1417906800, 1418425200, 1419116400, 1418770800, 1417993200]
-verifizierungen.ne | [1401832800]
0.mk | [1414796400, 1415919600, 1417129200, 1416783600]
我想把它放入 d[domains]=numbers 的字典中。对于列表中的每个数字,我想要一个整数,因为它目前是一个字符串。
我正在使用此代码:
d = defaultdict(list)
for line in g:
line = line.strip('\n')
domain, bl_dates= line.split('|')
bl_dates = [int(i) for i in bl_dates]
d[domain].append(bl_dates)
但我收到此错误,似乎该列表未被识别为列表:
Traceback (most recent call last):
File "test.py", line 12, in <module>
bl_dates = [int(i) for i in bl_dates]
ValueError: invalid literal for int() with base 10: '['
谁能帮我解决这个问题?
正则表达式是你的朋友:
import re
line = "00.pm | [1418511600, 1418598000, 1418943600]"
domain, bl_dates = re.split('\s+\|\s+', line)
res = [int(i) for i in re.findall('\d+', bl_dates)]
print res # prints [1418511600, 1418598000, 1418943600]
这种东西应该有效:
import json
d = defaultdict(list)
for line in g:
domain, list = line.split('|')
d[domain.strip()] = json.loads(list)
最后,d
看起来像这样:
{'00.re': [1410213600, 1417906800, 1418425200, 1419116400, 1418770800, 1417993200],
'-verifizierungen.ne': [1401832800],
'0.mk': [1414796400, 1415919600, 1417129200, 1416783600],
'-verifiziert.com': [1401832800],
'00.pm': [1418511600, 1418598000, 1418943600],
}
你可以使用 ast.literal_eval
:
>>> import ast
>>> ast.literal_eval("00.pm | [1418511600, 1418598000, 1418943600]".split("|")[1].strip())
[1418511600, 1418598000, 1418943600]
所以你的代码将是这样的:
import ast
my_dict = {}
with open('your_file') as f:
for x in f:
key, value = x.strip().split("|")
my_dict[key.strip()] = ats.literal_eval(value.strip())
我有以下文件 (g)..
-verifiziert.com | [1401832800]
00.pm | [1418511600, 1418598000, 1418943600]
00.re | [1410213600, 1417906800, 1418425200, 1419116400, 1418770800, 1417993200]
-verifizierungen.ne | [1401832800]
0.mk | [1414796400, 1415919600, 1417129200, 1416783600]
我想把它放入 d[domains]=numbers 的字典中。对于列表中的每个数字,我想要一个整数,因为它目前是一个字符串。
我正在使用此代码:
d = defaultdict(list)
for line in g:
line = line.strip('\n')
domain, bl_dates= line.split('|')
bl_dates = [int(i) for i in bl_dates]
d[domain].append(bl_dates)
但我收到此错误,似乎该列表未被识别为列表:
Traceback (most recent call last):
File "test.py", line 12, in <module>
bl_dates = [int(i) for i in bl_dates]
ValueError: invalid literal for int() with base 10: '['
谁能帮我解决这个问题?
正则表达式是你的朋友:
import re
line = "00.pm | [1418511600, 1418598000, 1418943600]"
domain, bl_dates = re.split('\s+\|\s+', line)
res = [int(i) for i in re.findall('\d+', bl_dates)]
print res # prints [1418511600, 1418598000, 1418943600]
这种东西应该有效:
import json
d = defaultdict(list)
for line in g:
domain, list = line.split('|')
d[domain.strip()] = json.loads(list)
最后,d
看起来像这样:
{'00.re': [1410213600, 1417906800, 1418425200, 1419116400, 1418770800, 1417993200],
'-verifizierungen.ne': [1401832800],
'0.mk': [1414796400, 1415919600, 1417129200, 1416783600],
'-verifiziert.com': [1401832800],
'00.pm': [1418511600, 1418598000, 1418943600],
}
你可以使用 ast.literal_eval
:
>>> import ast
>>> ast.literal_eval("00.pm | [1418511600, 1418598000, 1418943600]".split("|")[1].strip())
[1418511600, 1418598000, 1418943600]
所以你的代码将是这样的:
import ast
my_dict = {}
with open('your_file') as f:
for x in f:
key, value = x.strip().split("|")
my_dict[key.strip()] = ats.literal_eval(value.strip())