[ Foro de Python ]
Hola, buenos dias, estoy recien comenzando a ocupar python y necesito separar una cadena de un archivo csv, que seria por ejemplo este:
4811597 0 "B54 UE D VOLME" "B 54" 2,3 "II" 405449 5662603 51,1071057974937 7,64939794923743 "https://www.google.de/maps/@51.10710579749373,7.649397949237425,16z"
Mi pregunta seria; como es posible separar cada termino por espacios, menos cuando este se encuentra dentro de las comillas. Seria de gran ayuda su respuesta. Saludos y gracias de antemano
hola jan
si no entiendo mal pretendes crear una lista en que los elementos serán las palabras separadas por espacios, menos los caracteres que está entrecomillados que irán juntos
con split() puedes hacerlo, primero separando por " y el que no tenga " lo separas por espacios
suerte ;-)
Para la cadena:
text = '4811597 0 "B54 UE D VOLME""B 54" 2,3 "II" 405449 5662603 51,1071057974937 7,64939794923743 "https://www.google.de/maps/@51.10710579749373,7.649397949237425,16z"'
El código siguiente:
def linesplitter(line):
ctr=0
actualword=''
tempstore=[]
while ctr < len(text) - 1:
if text[ctr] == '"':
ctr += 1
while text[ctr] != '"':
actualword += text[ctr]
ctr += 1
if ctr == len(text):
break
tempstore.append(actualword.strip())
actualword = ''
else:
actualword+=text[ctr]
ctr+=1
while text[ctr]!=' ':
actualword+=text[ctr]
ctr+=1
if ctr==len(text):
break
tempstore.append(actualword.strip())
actualword=''
ctr+=1
return tempstore
res= linesplitter(text)
print(res)
Retorna:
['4811597', '0', 'B54 UE D VOLME', 'B 54', '2,3', 'II', '405449', '5662603', '51,1071057974937', '7,64939794923743', 'https://www.google.de/maps/@51.10710579749373,7.649397949237425,16z']
Espero que te ayude.
Respondo por segunda vez. Parece que el moderador está realmente ocupado.
def linesplitter(line):
ctr=0
actualword=''
tempstore=[]
while ctr < len(text) - 1:
if text[ctr] == '"':
ctr += 1
while text[ctr] != '"':
actualword += text[ctr]
ctr += 1
if ctr == len(text):
break
tempstore.append(actualword.strip())
actualword = ''
else:
actualword+=text[ctr]
ctr+=1
while text[ctr]!=' ':
actualword+=text[ctr]
ctr+=1
if ctr==len(text):
break
tempstore.append(actualword.strip())
actualword=''
ctr+=1
return tempstore
Si la linea introducida es:
text = '4811597 0 "B54 UE D VOLME""B 54" 2,3 "II" 405449 5662603 51,1071057974937 7,64939794923743 "https://www.google.de/maps/@51.10710579749373,7.649397949237425,16z"'
res= linesplitter(text)
print(res)
devuelve:
['4811597', '0', 'B54 UE D VOLME', 'B 54', '2,3', 'II', '405449', '5662603', '51,1071057974937', '7,64939794923743', 'https://www.google.de/maps/@51.10710579749373,7.649397949237425,16z']
Espero que te ayude.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)