2016-11-22 65 views
0

我正在尝试编写一个python脚本,它将递归遍历一个目录并在其中创建不同大小的文件。到目前为止,我已经到了这里。那么我没有写任何机制来创建不同大小的文件,但我需要它。我非常清楚我写的文件创建逻辑有问题。任何帮助是非常可观的。在Python中递归地在目录中创建不同大小的文件

我的代码:

#!/usr/bin/python 

import os 
import uuid 

for dirs in os.walk('/home/zarvis'): 
    print dirs 
    filename = str(uuid.uuid4()) 
    size = 1000000 
    with open(filename, "wb") as f: 
    f.write(" " * size) 
+0

http://stackoverflow.com/questions/2257441/random-string-使用大写字母和数字生成python在这里您可以找到如何生成随机字符串。通过随机化范围,您可以创建随机文件。 https://docs.python.org/2/library/random.html我想你可以用这个类随机化你想要的东西。 –

+0

随机化它正在工作,但我无法在所有目录内递归地创建文件。问题在那里。 –

回答

1

不要使用固定size。使用random.randint创建一个随机大小。使用os.path.join构建文件的完整路径。

import os 
import uuid 
import random 

for dirs in os.walk("/home/zarvis"): 
    d = dirs[0] 
    filename = str(uuid.uuid4()) 
    size = random.randint(1, 100) 
    with open(os.path.join(d, filename), "w") as f: 
     f.write(" " * size) 
+0

用我的答案让你的工作不太公平......;) –

+0

最简单的工作! :) –

+2

这是什么stackoverflow正在成为...人们不想学习...只是工作代码...所以...谁在乎解释...这只是工作只是复制/粘贴.. 。) –

0

你以错误的方式使用os.walk:与os.walk你其实并不改变你正在工作的目录。您的脚本只会在运行它的目录中创建文件。我不知道到底是什么uuid.uuid4()的做法,但可能是一个解决办法是用

filename = os.path.join(dirs[0], str(uuid.uuid4()) 

更换filename您需要[0]因为os.walk返回一个列表,其中第一个参数是当前目录下的命令是“行走” 。尝试一次打印os.walk的输出以获得它的感觉。

编辑:

从@LutzHorn

+0

应该使用'os.path.join'来代替'+'。 – 2016-11-22 11:21:03

+0

请参阅https://docs.python.org/3/library/uuid.html#uuid.uuid4 – 2016-11-22 11:22:41

+0

就在'os.path.join'上 –

0

评论后os.path.join取代了+试试这个

import os,uuid,random 
for root, dirs, files in os.walk("/home/zarvis/"): 
    filename = str(uuid.uuid4()) 
    size = random.randint(1, 1000000) 
    with open(os.path.join(root, filename), "wb") as f: 
     f.write(b" " * size) 
相关问题