{ "metadata": { "language": "Julia", "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#9 PLEAC Julia: Directories" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[PLEAC = Language Examples Alike Cookbook](http://pleac.sourceforge.net/)\n", "PLEAC examples are drawn from the \"Perl Cookbook\" by Tom Christiansen & Nathan Torkington, published by O'Reilly. They provide a nice range of examples oriented toward data munging, the type of work I tend to want to do first when learning a new language.\n", "\n", "\n", "The Julia examples below are principally translations from the [Python version](http://pleac.sourceforge.net/pleac_python/)\n", "\n", "###Caution\n", "I'm learning as I go, so the code below probably doesn't represent best practice. Your suggestions are welcome! \n", "Please file an issue or make a pull request to the [github repo](https://github.com/catawbasam/IJulia_PLEAC/).\n", "\n", "The examples are not complete. Missing items are generally noted in comments. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#9.1 Introduction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#save start path\n", "HOME=pwd()\n", "#make a file\n", "contents=\"\"\"Here are\\na few\\nlines of\\ntext content.\"\"\"\n", "open(\"julia_file.txt\", \"w\") do fo\n", " write(fo, contents)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 110, "text": [ "37" ] } ], "prompt_number": 110 }, { "cell_type": "code", "collapsed": false, "input": [ "mystat = stat(\"julia_file.txt\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Stat(mode=100666, size=37)" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(mystat)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Stat" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " \n", " device: Uint64 0\n", " inode: Uint64 0\n", " mode: Uint64 33206\n", " nlink: Int64 1\n", " uid: Uint64 0\n", " gid: Uint64 0\n", " rdev: Uint64 0\n", " size: Int64 37\n", " blksize: Int64 0\n", " blocks: Int64 0\n", " mtime: Float64 1.389181948430809e9\n", " ctime: Float64 101449.959148361\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "_ctime = ctime(\"julia_file.txt\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "101449.959148361" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "_filesize = filesize(\"julia_file.txt\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "37" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "#check for text in file\n", "#NOT IMPLEMENTED\n", "#isfile(\"julia_file.txt\") & _filesize>0 & ???" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "#list files in dir in repl\n", "#from IJulia just use ;ls\n", "mylist = readdir()'" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "1x29 Array{String,2}:\n", " \".git\" \".gitattributes\" \".gitignore\" \u2026 \"test0.csv\" \"test1.csv\"" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.2 Getting and Setting Timestamps" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#readtime : file atime is not supported\n", "writetime = mystat.mtime" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "1.389181948430809e9" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "touch(\"julia_test.txt\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.3 Deleting a File" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#make a file\n", "contents=\"\"\"Here are\\na few\\nlines of\\ntext content.\"\"\"\n", "open(\"julia_tmp.txt\", \"w\") do fo\n", " write(fo, contents)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "37" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "filename = \"julia_tmp.txt\" \n", "#if isfile(filename)\n", "try \n", " rm(filename)\n", "catch \n", " println(\"couldn't remove file $filename\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.4 Copying or Moving a File" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cp(\"julia_test.txt\",\"julia_test2.txt\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "mv(\"julia_test2.txt\",\"julia_test3.txt\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.5 Recognizing Two Names for the Same File" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# doesn't seem to work with Windows.\n", "myfiles = readdir() #just looking within a single directory...\n", "seen=Dict()\n", "for f in myfiles\n", " mystat = stat(f)\n", " key = (mystat.device, mystat.inode)\n", " if haskey(seen, key)\n", " seen[key] +=1\n", " else\n", " seen[key] = 0\n", " end\n", "end\n", "seen\n", "#dump(mystat)\n", "#Stat device: Uint64 0 inode: Uint64 0" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "{(0x0000000000000000,0x0000000000000000)=>30}" ] } ], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.6 Processing All Files in a Directory" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fl = {Any}[]\n", "for f in readdir()\n", " #do something\n", " print(f)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ ".git" ] }, { "output_type": "stream", "stream": "stdout", "text": [ ".gitattributes.gitignore.ipynb_checkpoints1_pleac_string.html1_pleac_string.ipynb2_pleac_numbers.html2_pleac_numbers.ipynb3_pleac_datetime-calendar.html3_pleac_datetime-calendar.ipynb3_pleac_datetime.html3_pleac_datetime.ipynb4_pleac_arrays.html4_pleac_arrays.ipynb5_pleac_dictionaries.html5_pleac_dictionaries.ipynb8_pleac_file_contents.ipynb9_pleac_directories.ipynbbintest.datjulia_file.txtjulia_file.txt2julia_file2.txtjulia_fixed.datjulia_test.txtjulia_test3.txtLICENSE.txtpleac_string.htmlREADME.mdtest.initest0.csvtest1.csv" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.7 Globbing, or Getting a List of Filenames Matching a Pattern\n", "TODO: write a nicer glob() function using readdir() + glob=>regex conversion" ] }, { "cell_type": "code", "collapsed": false, "input": [ "@windows_only function wincmd(cmdstr)\n", " \"\"\"run a command in windows\"\"\"\n", " _cmd = `CMD /C $cmdstr`\n", " return readall(_cmd)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 54, "text": [ "wincmd (generic function with 1 method)" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "#@readdir(\"*.csv\")\n", "run(`CMD /C dir *.csv`) \n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " Volume in drive C is WIN7_64\r\n", " Volume Serial Number is 0A20-76D1\r\n", "\r\n", " Directory of c:\\keithc\\julia\\ijulia_pleac\\IJulia_PLEAC\r\n", "\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "10/31/2013 05:54 AM 51 test0.csv\r\n", "10/31/2013 05:52 AM 65 test1.csv\r\n", " 2 File(s) 116 bytes\r\n", " 0 Dir(s) 56,786,563,072 bytes free\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "[split(f)[end] for f in split(wincmd(\"dir *.csv\"),\"\\r\\n\")[6:end-3]]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 62, "text": [ "2-element Array{String,1}:\n", " \"test0.csv\"\n", " \"test1.csv\"" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 62 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.8 Processing All Files in a Directory Recursively" ] }, { "cell_type": "code", "collapsed": false, "input": [ "function walk_files(path)\n", " for fn in readdir(path)\n", " if isdir(fn) \n", " walk_files(fn) \n", " else\n", " println(fn)\n", " end \n", " end \n", " return\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 63, "text": [ "walk_files (generic function with 1 method)" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "walk_files(\"C:\\\\keithc\\\\julia\\\\ijulia_default\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1_pleac_string-checkpoint.ipynb" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2_pleac_numbers-checkpoint.ipynb\n", "3_pleac_datetime-calendar-checkpoint.ipynb\n", "3_pleac_datetime-checkpoint.ipynb\n", "4_pleac_arrays-checkpoint.ipynb\n", "5_pleac_dictionaries-checkpoint.ipynb\n", "8_pleac_file_contents-checkpoint.ipynb\n", "9_pleac_directories-checkpoint.ipynb\n", "Cirrus - Copy.ipynb\n", "Cirrus.html\n", "Cirrus.ipynb\n", "CSV and Text IO.ipynb\n", "Dataframes test.ipynb\n", "file and system.ipynb\n", "Julia 12.ipynb\n", "Julia 24.ipynb\n", "julia_dataframe_gadfly.ipynb\n", "libexpat_test.ipynb\n", "SingaporeWeather.html\n", "SingaporeWeather.ipynb\n", "test2.h5\n", "test2.jld\n", "test3.jld\n", "test_HDF5.jl.ipynb\n", "Untitled0.ipynb\n", "Untitled1.ipynb\n" ] } ], "prompt_number": 65 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.9 Removing a Directory and Its Contents" ] }, { "cell_type": "code", "collapsed": false, "input": [ "function rmdir_all(absolute_path)\n", " stdir = pwd()\n", " cd(absolute_path)\n", " #println(\"rmdir_all: $absolute_path\")\n", " for fn in readdir()\n", " #println(fn)\n", " if isdir(fn)\n", " #println(\"dir: $fn\")\n", " rmdir_all(fn) \n", " else\n", " #println(\"rm: $fn\")\n", " rm(fn)\n", " end \n", " end \n", " #println(\"finish up\")\n", " cd(\"..\")\n", " #println(\"pwd: $(pwd()) rmdir: $absolute_path\")\n", " rmdir(absolute_path) \n", " cd(stdir)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 139, "text": [ "rmdir_all (generic function with 1 method)" ] } ], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "rmdir_all(\"C:\\\\keithc\\\\Temp\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 141 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.10 Renaming Files" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cd(HOME)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 111 }, { "cell_type": "code", "collapsed": false, "input": [ "fn=\"julia_test.txt\"\n", "fn2=replace(fn, \".txt\",\"2.txt\")\n", "cp(fn,fn2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 113 }, { "cell_type": "code", "collapsed": false, "input": [ "mv(fn2, replace(fn2, \"2.txt\",\"77.txt\"))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 114 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##9.11 Splitting a Filename into its Component Parts" ] }, { "cell_type": "code", "collapsed": false, "input": [ "testfile=\"$HOME$(readdir(HOME)[1])\"" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ "\"C:\\\\keithc\\\\julia\\\\ijulia_pleac\\\\IJulia_PLEAC.git\"" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "_basename = basename(testfile)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "\"IJulia_PLEAC.git\"" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "dirname(HOME)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 117, "text": [ "\"C:\\\\keithc\\\\julia\\\\ijulia_pleac\"" ] } ], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "maximum(search(_basename,\".\")) > 0" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "true" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "function file_extension(path)\n", " _basename = basename(path)\n", " return maximum(search(_basename,\".\"))>0 ? split(_basename,'.')[end] : \"\"\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 137, "text": [ "file_extension (generic function with 1 method)" ] } ], "prompt_number": 137 }, { "cell_type": "code", "collapsed": false, "input": [ "file_extension(_basename)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "\"git\"" ] } ], "prompt_number": 138 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Programs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#not implemented" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }