我有一排看起来像这样:
Alain,David,43,"['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']","['Notebook', 'Cigarette électronique', 'Livre:Roman']","['Matin:8h-10h', 'Apres-midi:12h-15h']","['Politique']
我试图删除定界符([,],“”,“),以获得类似的内容,以便稍后计算行之间的相似度:
Alain,David,43,Cinema:ABC, Cafe:Evasion, Hotel:Hotel Du Parc, Cafe:Casa del gelato,Notebook, Cigarette électronique, Livre:Roman,Matin:8h-10h, Apres-midi:12h-15h,Politique
但是失败了! 有想法吗?
答案 0 :(得分:0)
我认为您有列表,而不是字符串
row = ['Alain','David',43,"['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']","['Notebook', 'Cigarette électronique', 'Livre:Roman']","['Matin:8h-10h', 'Apres-midi:12h-15h']","['Politique']"]
某些列中包含带有列表的字符串。您必须将字符串转换回列表。您可以使用eval()
将字符串转换为Python的列表。
result = []
for item in row:
if isinstance(item, str) and item.startswith('['):
result += eval(item)
else:
result.append(item)
print(result)
编辑:
您使用
生成它file.writerow([
random.choice(Prenoms),
random.choice(Noms),
random.randint(17,65),
random.sample(Lfreq,4)
])
但是random.sample(Lfreq,4)
给出了您必须将其写成单独的列的列表。
data = random.sample(Lfreq,4)
file.writerow([
random.choice(Prenoms),
random.choice(Noms),
random.randint(17,65),
data[0],
data[1],
data[2],
data[3]
])
或使用extend
或+=
data = [random.choice(Prenoms), random.choice(Noms), random.randint(17,65)]
#data.extend(random.sample(Lfreq,4))
data += random.sample(Lfreq,4)
file.writerow(data)
答案 1 :(得分:0)
有一个函数可以解决这个问题。
# -*- coding: utf-8 -*-
import re
def plain_array_from_array_with_subarrays_as_strings(array):
response = []
for el in array:
if not isinstance(el, (int, float)):
sub_els = re.findall(r"'([^']+)'", el)
if len(sub_els) > 0:
for sub_el in sub_els:
response.append(sub_el)
else:
response.append(el)
else:
response.append(el)
return response
r = [
"Alain",
"David",
43,
"['Cinema:ABC', 'Cafe:Evasion', 'Hotel:Hotel Du Parc', 'Cafe:Casa del gelato']",
"['Notebook', 'Cigarette électronique', 'Livre:Roman']",
"['Matin:8h-10h', 'Apres-midi:12h-15h']",
"['Politique']"
]
print(plain_array_from_array_with_subarrays_as_strings(r))
输出:
['Alain',
'David',
43,
'Cinema:ABC',
'Cafe:Evasion',
'Hotel:Hotel Du Parc',
'Cafe:Casa del gelato',
'Notebook',
'Cigarette électronique',
'Livre:Roman',
'Matin:8h-10h',
'Apres-midi:12h-15h',
'Politique']