使用Beautifulsoup(python 2.7)解析HTML文件,我有以下列表结构列表(我希望在一个CSV文件行中这样)。
[[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff']], [['gg', 'h'],['ii', 'j']], [['nn', 'o', 'p'], ['qq', 'r', 's']], ['kkkk', 'llll', 'mmmm']]
我的代码是:
import csv
with open("profile_test.csv", "wb") as f:
writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
writer.writerows(full_profile)
import csv
with open('profile_test.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row
我得到的输出是不同行列表中的每个列表:
[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff']]
[['gg', 'h'],['ii', 'j']]
[['nn', 'o', 'p'], ['qq', 'r', 's']]
['kkkk', 'llll', 'mmmm']
我使用了分隔符,但没有得到任何结果。
我是python和机器学习的新手,我很难适当地格式化我的数据。
感谢您的建议。
修改
只是为了进一步澄清,我希望在一行中获取数据的格式为:
[[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff']], [['gg', 'h'],['ii', 'j']], [['nn', 'o', 'p'], ['qq', 'r', 's']], ['kkkk', 'llll', 'mmmm']]
答案 0 :(得分:0)
如果我理解正确,你想要一条包含所有这些字母的单行,当字母改变时,逗号是什么?因为你有不同嵌套级别的嵌套列表,我认为你将不得不构建字符串来自己写,而不是使用csv包来寻求帮助。
例如,如果嵌套不会太深,def big_string(_list):
try:
return ','.join(_list)
except TypeError:
return ','.join([big_string(thing) for thing in _list])
with open("profile_test.csv", "wb") as f:
f.write(big_string(full_profile))
显示上述函数返回的内容,
>>> big_string([[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff']], [['gg', 'h'],['ii', 'j']], [['nn', 'o', 'p'], ['qq', 'r', 's']], ['kkkk', 'llll', 'mmmm']])
'aaa,bbb,ccc,ddd,eee,fff,gg,h,ii,j,nn,o,p,qq,r,s,kkkk,llll,mmmm'
如果你正在寻找输出,如:
aaa
bbb
ccc
ddd
你可以这样做:
with open("profile_test.csv", "wb") as f:
for entry in big_string(full_profile).split(','):
f.write(entry + '\n')
答案 1 :(得分:0)
此?
result = []
with open('profile_test.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
result.append(row)
print(result)
答案 2 :(得分:0)
@Diego,
我仍然不完全确定你的目的是什么,但是如果你希望你的列表被压平并放在最高级别的列表结构中,你可以做这样的事情:
def rws():
x = [[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff']], [['gg', 'h'],['ii', 'j']], [['nn', 'o', 'p'], ['qq', 'r', 's']], ['kkkk', 'llll', 'mmmm']]
sub_lists = []
for y in x:
if hasattr(y[0], '__iter__'):
sub_lists.append([i for s in y for i in s] )
else:
sub_lists.append(y)
fin = []
for l in sub_lists:
fin.append('|'.join(l))
print ','.join(fin)
它会输出:
aaa|bbb|ccc|ddd|eee|fff
gg|h|ii|j
nn|o|p|qq|r|s
kkkk|llll|mmmm
然后:
aaa|bbb|ccc|ddd|eee|fff,gg|h|ii|j,nn|o|p|qq|r|s,kkkk|llll|mmmm
正如所指出的,这不会处理深度递归,它只处理3或更少。此外,更重要的是,这可以用逗号分隔,您可以将每个一起添加到一个单元格中。这就是你要找的东西吗?
CSV中不能包含任何列表类型结构。这是一个明确的否定。