动态创建python中的文件

时间:2015-01-22 15:33:43

标签: python

我知道这是一个noob问题,但我有一些困难使它成功

def create(file):
    f = open(file,'w')

它返回" IOError:[Errno 2]没有这样的文件或目录:"

如果我这样做,当然有效:

file ="myfile"
f = open(file,'w')

但我无法弄清楚如何从函数参数

创建我的文件

对于noob问题感到抱歉,提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

站点可以看起来像操作系统目录的路径。例如:stackoverflow.com/something将被解释为目录stackoverflow.com,其中有一个文件something

使用os.path.dirname时可以看到这一点:

>>> os.path.dirname('stackoverflow.com/something')
'stackoverflow.com'

如果确实如此,并且您仍想继续,则将路径传递到目录中的某个位置,而不仅仅是文件名。

您必须首先确保目录stackoverflow.com存在:

file_path = 'stackoverflow.com/something'
dirname = os.path.dirname(file_path)

if not os.path.exists(dirname):
    # if stackoverflow.com directory does not exist it will be created
    os.makedirs(dirname)

# .. carry on to open file_path and use it.

注意http://等喜欢并考虑使用真正的网址解析器。

提示: file已在python中定义,您不应该使用它来命名变量来覆盖它。

答案 1 :(得分:1)

编辑:

def create(file):
    f = open(file,'w')
    f.close()

如果您使用以下方式调用此函数:

create('myfile.txt')

它将在运行代码的任何目录中创建名为myfile.txt的文件。请注意,您传递的是string而不是object

由于我现在看到您传入的字符串类似于http://www.google.com,因此您尝试在www.google.com文件夹中创建名为http:的文件。您将不得不截断或更改/,因为Windows文件的名称中不能包含该字符。

我们将使用此示例中最后一个/之后的所有内容:

def create(filename):
    filename = re.sub(r'.*//*', '', filename)
    f = open(filename, 'w')
    f.close()

所以调用:create('www.google.com/morestuff/things')将创建一个名为things

的文件

答案 2 :(得分:1)

当您将"http://somesite.com/"文件传递给函数时,python将其视为目录结构。

一旦python到达"http:/",它就会假设我们有一个目录。不允许在unix中使用正斜杠,我想它对于windows来说是相同的。

要将名称变为可用的名称,您可以使用urlparse.urlsplit的一些变体:

import urlparse

import urlparse
def parse(f):
    prse  = urlparse.urlsplit(f)
    return prse.netloc if f.startswith("http") else prse.path.split("/",1)[0]