Skip to content

Instantly share code, notes, and snippets.

@JoeGermuska
Forked from bycoffe/csvcut
Created September 14, 2009 21:01
Show Gist options
  • Select an option

  • Save JoeGermuska/186930 to your computer and use it in GitHub Desktop.

Select an option

Save JoeGermuska/186930 to your computer and use it in GitHub Desktop.

Revisions

  1. JoeGermuska revised this gist Sep 14, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion csvcut
    Original file line number Diff line number Diff line change
    @@ -32,7 +32,7 @@ delimiter = ','
    cols = [0, ]
    if opts:
    opts = dict(opts)
    show_headers = bool('-h' in opts or '--header' in opts)
    show_headers = '-h' in opts
    if '-f' in opts:
    cols = opts['-f'].split(",")
    if '-d' in opts:
  2. JoeGermuska revised this gist Sep 14, 2009. 1 changed file with 14 additions and 2 deletions.
    16 changes: 14 additions & 2 deletions csvcut
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,8 @@ Note that fields are zero-based, as opposed to 'cut' where they are 1-based.
    Leveraged from/motivated by an example from @bycoffe
    Should use something better than getopt, but this works...
    Usage:
    csvcut foobar.csv
    (prints the first column of each row of foobar.csv)
    @@ -15,9 +17,13 @@ Usage:
    csvcut -f 0,2 -d "|" foobar.csv
    (prints the first and third columns of the pipe-delimited foobar.csv)
    csvcut -h foobar.csv
    (prints the values of the first line of foobar.csv, preceded by the field index which would
    be used to display that column. If present, the -f option will be ignored.)
    """
    import sys, csv, getopt
    opts, args = getopt.getopt(sys.argv[1:], "f:d:", ["fields=", "delimiter="])
    opts, args = getopt.getopt(sys.argv[1:], "f:d:h", [])
    if args:
    i = open(args[0])
    else:
    @@ -26,11 +32,17 @@ delimiter = ','
    cols = [0, ]
    if opts:
    opts = dict(opts)
    show_headers = bool('-h' in opts or '--header' in opts)
    if '-f' in opts:
    cols = opts['-f'].split(",")
    if '-d' in opts:
    delimiter = opts['-d']
    for row in csv.reader(i, delimiter=delimiter):
    if show_headers:
    for i,c in enumerate(row):
    print "%3i: %s" % (i,c)
    break
    for c in cols:
    print row[int(c)],
    print
    print

  3. @bycoffe bycoffe revised this gist Sep 14, 2009. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions csvcut
    Original file line number Diff line number Diff line change
    @@ -22,8 +22,8 @@ if args:
    i = open(args[0])
    else:
    i = sys.stdin
    delimiter = ','
    cols = [1]
    delimiter = ','
    cols = [0, ]
    if opts:
    opts = dict(opts)
    if '-f' in opts:
  4. @bycoffe bycoffe revised this gist Sep 14, 2009. 1 changed file with 13 additions and 10 deletions.
    23 changes: 13 additions & 10 deletions csvcut
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,6 @@
    #!/usr/bin/env python
    """
    Like cut, but for CSVs. To be used from a shell command line.
    Change row[1] to the row index to be printed. row[1] will print the second
    item in the row.
    Note that fields are zero-based, as opposed to 'cut' where they are 1-based.
    @@ -15,19 +12,25 @@ Usage:
    head -10 foobar.csv | csvcut -f 0,2
    (prints the first and third columns of the first ten lines of foobar.csv)
    csvcut -f 0,2 -d "|" foobar.csv
    (prints the first and third columns of the pipe-delimited foobar.csv)
    """
    import sys, csv, getopt
    opts, args = getopt.getopt(sys.argv[1:], "f:", ["fields="])
    opts, args = getopt.getopt(sys.argv[1:], "f:d:", ["fields=", "delimiter="])
    if args:
    i = open(args[0])
    else:
    i = sys.stdin
    delimiter = ','
    cols = [1]
    if opts:
    cols = opts[0][1].split(",")
    else:
    cols = [0]
    for row in csv.reader(i):
    opts = dict(opts)
    if '-f' in opts:
    cols = opts['-f'].split(",")
    if '-d' in opts:
    delimiter = opts['-d']
    for row in csv.reader(i, delimiter=delimiter):
    for c in cols:
    print row[int(c)],
    print

    print
  5. JoeGermuska revised this gist Sep 14, 2009. 1 changed file with 11 additions and 2 deletions.
    13 changes: 11 additions & 2 deletions csvcut
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,16 @@ Like cut, but for CSVs. To be used from a shell command line.
    Change row[1] to the row index to be printed. row[1] will print the second
    item in the row.
    Leveraged from an example from @bycoffe
    Note that fields are zero-based, as opposed to 'cut' where they are 1-based.
    Leveraged from/motivated by an example from @bycoffe
    Usage:
    csvcut foobar.csv
    (prints the first column of each row of foobar.csv)
    head -10 foobar.csv | csvcut -f 0,2
    (prints the first and third columns of the first ten lines of foobar.csv)
    """
    import sys, csv, getopt
    opts, args = getopt.getopt(sys.argv[1:], "f:", ["fields="])
    @@ -16,7 +25,7 @@ else:
    if opts:
    cols = opts[0][1].split(",")
    else:
    cols = [1]
    cols = [0]
    for row in csv.reader(i):
    for c in cols:
    print row[int(c)],
  6. JoeGermuska created this gist Sep 14, 2009.
    24 changes: 24 additions & 0 deletions csvcut
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    #!/usr/bin/env python
    """
    Like cut, but for CSVs. To be used from a shell command line.
    Change row[1] to the row index to be printed. row[1] will print the second
    item in the row.
    Leveraged from an example from @bycoffe
    """
    import sys, csv, getopt
    opts, args = getopt.getopt(sys.argv[1:], "f:", ["fields="])
    if args:
    i = open(args[0])
    else:
    i = sys.stdin
    if opts:
    cols = opts[0][1].split(",")
    else:
    cols = [1]
    for row in csv.reader(i):
    for c in cols:
    print row[int(c)],
    print