1
mengzhuo 2015-01-09 13:46:51 +08:00 1
enumerate 每个文件
按100取模分配 移动文件 搞定 |
2
beordle 2015-01-09 13:49:20 +08:00 1
[move(index%100,filename) for index,filename in enumerate(list(glob.glob('*.txt')))]
|
3
laotaitai 2015-01-09 15:36:08 +08:00
@beordle
牛叉! 不过我更感兴趣的是move函数你怎么写? index>=100的时候, 你该咋办? move怎么知道是第二轮, 第三轮, 第四轮了? |
5
laotaitai 2015-01-09 15:54:40 +08:00
@expkzb
move函数怎么知道是第几轮呢? 我看, 还是应该把index也传进去为好, 或者告诉move是第几轮了. |
6
beordle 2015-01-09 16:07:35 +08:00
@laotaitai 不用知道是低幾輪就能有需要的效果吧
先os.mkdir建立好100個文件夾 move=lambda i,n:shutil.move(n,os.path.join(str(n),n)) |
7
KentY 2015-01-09 16:09:20 +08:00 via iPhone
awk 就一行能搞定
|
10
KentY 2015-01-09 16:12:37 +08:00 via iPhone
@beordle 原来是python节点,以为是程序员了,添乱了。awk很善于做这种事。
我哪写我是天津人啦 |
16
KentY 2015-01-09 17:27:53 +08:00 3
## quick and dirty
find or ls...|awk 'NR%100==1{t="/dest"++i}$0="mv " $0 " " t'|sh - 假设你那些文件用ls/find找到 - 去掉最后的`|sh`可以显示生成的mv命令,并不执行 - 这个会mv你那些文件到dest1-dest1000目录。 用seq模拟下10个文件,每2个存到相应目录: kent$ seq -f "%g.txt" 10|awk 'NR%2==1{t="/dest"++i}$0="mv " $0 " " t' mv 1.txt /dest1 mv 2.txt /dest1 mv 3.txt /dest2 mv 4.txt /dest2 mv 5.txt /dest3 mv 6.txt /dest3 mv 7.txt /dest4 mv 8.txt /dest4 mv 9.txt /dest5 mv 10.txt /dest5 ##Better version 前面那个quick and dirty, dirty在于,很多写死的东西,而且文件名有空格什么的会有问题,这个比上一个文件长,但是好一些,也一行: ...|awk -v q='"' -v dest="/dest" -v g="100" 'NR%g==1{t=dest"" ++i}{printf "mv %s %s\n", q$0q,q t q}'|sh 这个`dest` 参数可以制定,每多少个`g`参数也是活的,文件名都用引号括了,同样用seq模拟: kent$ seq -f "%g.txt" 10|awk -v q='"' -v dest="/dest" -v g="2" 'NR%g==1{t=dest"" ++i}{printf "mv %s %s\n", q$0q,q t q}' mv "1.txt" "/dest1" mv "2.txt" "/dest1" mv "3.txt" "/dest2" mv "4.txt" "/dest2" mv "5.txt" "/dest3" mv "6.txt" "/dest3" mv "7.txt" "/dest4" mv "8.txt" "/dest4" mv "9.txt" "/dest5" mv "10.txt" "/dest5" |
19
KDr2 2015-01-09 17:51:19 +08:00 1
perl -pe 'if(!(int($.%100)-1)) {open(FH, ">xxx.@{[int($./100)]}.txt"); select FH;}' data.txt
|
20
KDr2 2015-01-09 20:14:57 +08:00
擦,竟然看错了题目,以为分一个1w行的文件成100个文件。。。
|
21
ryd994 2015-01-11 03:22:06 +08:00 via Android
为什么我先想到的是用python生成参数序列然后xargs mv么……
|