Thursday, February 16, 2012

batch rename and (move) files using python


So, my friend asked me to rename the files. The file names are alphanumeric and they should be renamed with leading zeroes but in order. the default sort is 1,10,11….2, 20….etc  but correct order would be 1,2,3,4,5…… So, I did some hit and trial and some binging, googling…
Finally done
here is the code

import os
import re
import shutil
 



def main():
## Commented out are the codes to create file for working purposes    
##    for a in range(1,20):
##        for b in ["a", "b", "c"]:
##            filename="sec"+str(a)+b+".data"
##            c=open(filename,"a")
##            c.close()
    directory="oldnames"
    directory2="newnames"
    fnames=os.listdir(directory)
    #print(str(fnames))
    sortedfnames=sorted(fnames, key=natural_sortkey)
    #print(str(sortedfnames))
    for index, fname in enumerate(sortedfnames):

        index2=str(index).zfill(4)  ##change zfill parameter to 3 if 001, 4 if 0001 etc
        #print str(index)+ fname
        shutil.copy(os.path.join(directory,fname), os.path.join(directory2,(index2+fname)))
    

tokenize = re.compile(r'(\d+)|(\D+)').findall

def natural_sortkey(string):          
    return tuple(int(num) if num else alpha for num, alpha in tokenize(string))


main()


Worked as magic!!



note: I got the alphanumeric sort tips from stackoverflow user(http://stackoverflow.com/users/107366/ants-aasma)

Wednesday, February 15, 2012

Alternate styling in word [With Macro]

Call me lazy,

I would rather write a script to do alternate bold and not bold of paragraphs than do it manually.

So, here is the script

sub i_am_not_lazy()

Dim para As Paragraph
Dim i As Integer
i = 1
For Each para In Selection.Paragraphs
If i Mod 2 = 0 Then
para.Range.Font.Bold = True
Else
para.Range.Font.Bold = False
End If
i = i + 1
Next

end sub



here is the result...



Dear aaa,
I am not trying to be lazy but I have some 50 plus questions
and
 I have to insert answers in between them in BOLD.
I am trying to find out if we have some smart idea to do.
Thank you for your post. I really was not looking for using CTRL B button because I have to press it everytime I enter answers.
Your response for putting macros seemed useful, but I still did not get how to use it.
Can you please guide me through the steps?
Thank you so much
aaa!!

Thursday, January 12, 2012

find and replace in batch in excel

Sub ReplaceText()
 'value to replace in D, value to be replaced by in E
For Each vCell In Range("d1:d49").Cells 'range to replace b
Columns("b:b").Cells.Replace What:=vCell, Replacement:=vCell.Offset(0, 1).Value, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next vCell
End Sub

Tuesday, November 1, 2011

alpha lattice design

Background Design: cycdesign alphagen alpha+ R (agricolae) SAS (plan?) Analyse: With SAS proc lattice package (agricolae)

Wednesday, September 14, 2011

R index search and subset data

ind<-which(x$a>.5 & x$b>.5)

subset<-x(ind,)

Wednesday, September 7, 2011

Histogram in excel

Use Frequency function and Command Enter or Ctrl Shift Enter to populate through all bins...

Wednesday, September 29, 2010

Move multiple rows to Coulmns

Problem:

I took data from field which are like this

18-11

16-11

4-11

31-13

1-6

7-10

34-11

5-16

3

_

3

_

3

3

1

2

26-16

4-14

26-1

18-9

27-15

15-7

28-13

26-14

3

3

3

5

7

1

5

1

but I want convert it to

18-11 3
16-11 _
4-11 3
31-13 _
1-6 3
7-10 3
34-11 1
5-16 2
26-16 3
4-14 3
26-1 3
18-9 5
27-15 7
15-7 1
28-13 5
26-14 1

 

So, here is the macro

Sub alternateRowsToCol()
    Application.ScreenUpdating = False
    Dim row, col As Integer
    row = Sheets("Sheet3").UsedRange.Rows.Count
    col = Sheets("Sheet3").UsedRange.Columns.Count
    
    
    For i = 1 To row Step 2
    Sheets("Sheet3").Activate
  
    Sheets("Sheet3").Range("A" & CStr(i) & ":X" & CStr(i + 1)).Select
    ' X here is because I have 24 rows but in example just 8
    Selection.Copy
    Sheets("Sheet4").Activate
  
    Sheets("sheet4").Range("A" & CStr(24 * ((i - 1) / 2) + 1)).Select
    ' 24 here is because I have 24 rows but in example just 8
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
  
    Next i
    Application.ScreenUpdating = True
   
End Sub