112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
|
||
|
import os, sys, string
|
||
|
from os import path
|
||
|
from sys import stdin, stdout, exit, argv
|
||
|
from string import join, strip, atoi
|
||
|
try: from random import choice
|
||
|
except: from whrandom import choice
|
||
|
|
||
|
from ulib.all import uprint
|
||
|
|
||
|
def quote_maybe(str, quote=True):
|
||
|
if quote: str = "'%s'" % str.replace("'", "'\\''")
|
||
|
return str
|
||
|
|
||
|
def run_urandomize():
|
||
|
global argv
|
||
|
|
||
|
if len(argv) == 2 and argv[1] in ('--help', ):
|
||
|
progname = path.split(argv[0])[1]
|
||
|
uprint(u"""%(progname)s -- Mélanger des lignes de façon aléatoire
|
||
|
|
||
|
USAGE
|
||
|
%(progname)s [-j | -J size]
|
||
|
|
||
|
OPTIONS
|
||
|
-j, -J size
|
||
|
Fusionner les lignes pour en faire des lignes de taille maximum $size
|
||
|
octets (920 par défaut. Utiliser -1 pour pas de limite.)
|
||
|
-q Mettre les valeurs entre quotes
|
||
|
""" % vars())
|
||
|
exit(0)
|
||
|
|
||
|
DEFAULT_SIZE = 920
|
||
|
size = None
|
||
|
quote = False
|
||
|
|
||
|
argv = argv[1:]
|
||
|
while argv:
|
||
|
if argv[0][:1] == '-':
|
||
|
opt = argv[0][:2]
|
||
|
if opt == '-j':
|
||
|
size = DEFAULT_SIZE
|
||
|
|
||
|
elif opt == '-J':
|
||
|
if not argv[0][2:]:
|
||
|
if not argv[1:2]:
|
||
|
raise ValueError, "-J attend un argument"
|
||
|
else:
|
||
|
arg = argv[1]
|
||
|
argv = argv[1:]
|
||
|
else:
|
||
|
arg = argv[0][2:]
|
||
|
size = atoi(arg)
|
||
|
|
||
|
elif opt == '-q':
|
||
|
quote = True
|
||
|
|
||
|
elif opt == '--':
|
||
|
break
|
||
|
|
||
|
else:
|
||
|
raise ValueError, "Option invalide"
|
||
|
else:
|
||
|
break
|
||
|
argv = argv[1:]
|
||
|
|
||
|
if argv:
|
||
|
# 'lignes' données en ligne de commande
|
||
|
input = argv
|
||
|
else:
|
||
|
input = []
|
||
|
while 1:
|
||
|
line = stdin.readline()
|
||
|
if not line: break
|
||
|
while line[ - 1:] in ('\n', '\r'):
|
||
|
line = line[: - 1]
|
||
|
input.append(line)
|
||
|
|
||
|
if size:
|
||
|
# Il faut fusionner les lignes
|
||
|
# On en profite pour les striper
|
||
|
output = []
|
||
|
line = ''
|
||
|
while input:
|
||
|
item = choice(input)
|
||
|
input.remove(item)
|
||
|
|
||
|
if line: line = line + ' '
|
||
|
line = line + strip(quote_maybe(item, quote))
|
||
|
|
||
|
if size != - 1 and len(line) >= size:
|
||
|
output.append(line)
|
||
|
line = ''
|
||
|
if line:
|
||
|
output.append(line)
|
||
|
|
||
|
else:
|
||
|
# On se contente de randomiser les lignes
|
||
|
output = []
|
||
|
while input:
|
||
|
item = choice(input)
|
||
|
input.remove(item)
|
||
|
output.append(quote_maybe(item, quote))
|
||
|
|
||
|
for item in output:
|
||
|
stdout.write(item + '\n')
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
run_urandomize()
|