Python在同一目录中找不到文件。

8

我正在编写一个简单的脚本,用于在邮件中附加文件,但是它找不到文件。这是我的一个代码块:

    # KML attachment
    filename='20140210204804.kml'
    fp = open(filename, "rb")
    att = email.mime.application.MIMEApplication(fp.read(),_subtype="kml")
    fp.close()
    att.add_header('Content-Disposition','attachment',filename=filename)
    msg.attach(att)

脚本所在的文件夹中存在文件20140210204804.kml。我收到以下错误:

 IOError: [Errno 2] No such file or directory: '20140210204804.kml'

任何帮助都是受欢迎的。


2
你是如何运行这个脚本的?当前目录不一定与脚本所在位置相同。 - Tim Pietzcker
1个回答

27

工作目录未设置为脚本所在的目录,而是设置为启动脚本时的当前目录。

使用 __file__ 确定文件位置,并将其用作起始点,以使 filename 成为绝对路径:

import os

here = os.path.dirname(os.path.abspath(__file__))

filename = os.path.join(here, '20140210204804.kml')

太好了!我没想到这种方法。我能理解 "file" 的作用,但有没有任何链接可以解释它为什么/如何工作? - Abhishek dot py
@Abhishekdotpy:这里的“技巧”大多数都是使用os.path模块;在那里查找abspathdirname__file__只是当前模块的文件名,它可以相对于工作目录。 - Martijn Pieters
1
@Abhishekdotpy:__file__import语句文档Python数据模型文档中都有记录。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接