##// END OF EJS Templates
SList.fields() implemented
vivainio -
Show More
@@ -5,7 +5,7 General purpose utilities.
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
5 This is a grab-bag of stuff I find useful in most programs I write. Some of
6 these things are also convenient when working at the command line.
6 these things are also convenient when working at the command line.
7
7
8 $Id: genutils.py 2767 2007-09-18 17:26:52Z vivainio $"""
8 $Id: genutils.py 2847 2007-10-24 15:16:24Z vivainio $"""
9
9
10 #*****************************************************************************
10 #*****************************************************************************
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
@@ -1058,10 +1058,47 class SList(list):
1058 return SList([el for el in self if pred(el)])
1058 return SList([el for el in self if pred(el)])
1059 else:
1059 else:
1060 return SList([el for el in self if not pred(el)])
1060 return SList([el for el in self if not pred(el)])
1061 def fields(self, *fields):
1062 """ Collect whitespace-separated fields from string list
1063
1064 Allows quick awk-like usage of string lists.
1065
1066 Example data (in var a, created by 'a = !ls -l')::
1067 -rwxrwxrwx 1 ville None 18 Dec 14 2006 ChangeLog
1068 drwxrwxrwx+ 6 ville None 0 Oct 24 18:05 IPython
1069
1070 a.fields(0) is ['-rwxrwxrwx', 'drwxrwxrwx+']
1071 a.fields(1,0) is ['1 -rwxrwxrwx', '6 drwxrwxrwx+']
1072 (note the joining by space).
1073
1074 IndexErrors are ignored.
1075
1076 Without args, fields() just split()'s the strings.
1077 """
1078 if len(fields) == 0:
1079 return [el.split() for el in self]
1080
1081 res = SList()
1082 for el in [f.split() for f in self]:
1083 lineparts = []
1084
1085 for fd in fields:
1086 try:
1087 lineparts.append(el[fd])
1088 except IndexError:
1089 pass
1090 if lineparts:
1091 res.append(" ".join(lineparts))
1092
1093 return res
1094
1095
1096
1097
1061
1098
1062 def print_slist(arg):
1099 def print_slist(arg):
1063 """ Prettier (non-repr-like) and more informative printer for SList """
1100 """ Prettier (non-repr-like) and more informative printer for SList """
1064 print "SList (.p, .n, .l, .s, .grep() available). Value:"
1101 print "SList (.p, .n, .l, .s, .grep(), .fields() available). Value:"
1065 nlprint(arg)
1102 nlprint(arg)
1066
1103
1067 print_slist = result_display.when_type(SList)(print_slist)
1104 print_slist = result_display.when_type(SList)(print_slist)
General Comments 0
You need to be logged in to leave comments. Login now