1
votes

Créer une liste d'entrée entre guillemets à partir d'une chaîne dé-limitée en Python

J'ai une ligne quelque chose comme

date | v3 | 0,00 | 0,00 | 0,00 | 0 | 0 | 7324.00 | 0,00 | 12278 12276 | Mar 29 janvier 09:36:47

Je veux parcourir cette ligne et former une sortie quelque chose comme ça

["date", "v3", "0.00", "0.00", "0.00", "0", "0", "7324.00", "0.00", "12278 12276", "Mar 29 janvier 09:36:47 "]

ce que je veux réaliser en utilisant le script shell, comment puis-je y parvenir?


1 commentaires

Lequel souhaitez-vous utiliser? Un script shell ou une structure Python pour contenir une liste?


4 Réponses :


3
votes

1ère solution: Pourriez-vous essayer de suivre.

["date" ,"v3" ,"0.00" ,"0.00" ,"0.00" ,"0" ,"0" ,"7324.00" ,"0.00" ,"12278 12276","Tue Jan 29 09:36:47"]

Le résultat sera le suivant.

awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" '
{
  gsub(/ \||\| /,s3)
  gsub(/\|/,s1)
  $0="[" s2 $0 s2 "]"
}
1
'  Input_file

2ème solution: OU pour gérer les espaces inégaux, essayez de suivre.

awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" '{gsub(/ \||\| /,s3);gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file

OU (une forme non-une ligne de ci-dessus):

["date ","v3"," 0.00"," 0.00"," 0.00"," 0"," 0"," 7324.00"," 0.00"," 12278 12276","Tue Jan 29 09:36:47"]

La sortie sera comme suit.

awk -v s1="\",\"" -v s2="\"" '{gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file


0 commentaires

1
votes

Vous semblez contenir des informations dans une structure de liste [..] qui est tout à fait synonyme d'une construction en Python qui n'est pas facilement implémentée dans bash (qui a des tableaux) ou Awk .

Vous pouvez simplement faire ce qui suit

import json
str='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47'
split_str = str.split("|")
wo_spaces = [ str.strip() for str in split_str ]
print( json.dumps( wo_spaces ) )
["date", "v3", "0.00", "0.00", "0.00", "0", "0", "7324.00", "0.00", "12278 12276", "Tue Jan 29 09:36:47"]


0 commentaires

1
votes

Une manière sed simple:

["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"]

Sortie:

sed 's/\s*|\s*/","/g;s/^/["/;s/$/"]/'


0 commentaires

0
votes

Utilisation de Perl

$ export a='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47'
$ echo $a | perl -F"\s*\|\s*" -lane ' $_="\x22".$_."\x22" for(@F); print "[",join(",",@F),"]" '
["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"]
$


0 commentaires