我知道这是一个noob问题,但我有一些困难使它成功
def create(file):
f = open(file,'w')
它返回" IOError:[Errno 2]没有这样的文件或目录:"
如果我这样做,当然有效:
file ="myfile"
f = open(file,'w')
但我无法弄清楚如何从函数参数
创建我的文件对于noob问题感到抱歉,提前感谢您的帮助。
答案 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]