32

我在名为 5_1.txt的目录中有一个名为 的文件direct,如何使用 读取该文件read

我使用以下方法验证了路径:

import os
os.getcwd()
os.path.exists(direct)

结果是

x_file=open(direct,'r')  

我得到了这个错误:

Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
x_file=open(direct,'r')
IOError: [Errno 13] Permission denied

我不知道为什么我无法读取文件?有什么建议么?

谢谢 。

4

7 回答 7

29

看起来您正试图打开一个目录进行读取,就好像它是一个常规文件一样。许多操作系统不会让你这样做。无论如何你都不需要,因为你想要的(从你的描述来看)是

x_file = open(os.path.join(direct, "5_1.txt"), "r")  

或者干脆

x_file = open(direct+"/5_1.txt", "r")
于 2012-11-04T23:01:15.757 回答
11

如果您不在指定目录中(即直接),则应使用(在 linux 中):

x_file = open('path/to/direct/filename.txt')

请注意引号和目录的相对路径。

这可能是您的问题,但您也无权访问该文件。也许您正试图以其他用户身份打开它。

于 2012-11-04T22:57:12.357 回答
4

您不能使用该功能“打开”目录。open这个函数是用来打开文件的。

在这里,您要做的是打开目录中的文件。您必须做的第一件事是计算此文件的路径。该函数将允许您通过连接部分路径(目录和文件名)来做到这一点:os.path.join

fpath = os.path.join(direct, "5_1.txt")

然后您可以打开该文件:

f = open(fpath)

并阅读其内容:

content = f.read()

此外,我相信在 Windows 上,open在目录上使用确实会返回PermissionDenied异常,尽管情况并非如此。

于 2012-11-04T23:00:15.573 回答
2

我发现这种方式也很有用。

import tkinter.filedialog
from_filename = tkinter.filedialog.askopenfilename()  

这里会出现一个窗口,您可以浏览直到找到该文件,然后单击它,然后您可以继续使用打开和阅读。

from_file = open(from_filename, 'r')
contents = from_file.read()
contents
于 2012-11-05T00:25:47.840 回答
1

对于 Windows,您可以使用带有 '\\' 的完整路径(Linux 和 Mac 的为'/' )作为分隔符,您可以使用 os.getcwd 来获取当前工作目录并提供参考当前工作目录的路径

data_dir = os.getcwd()+'\\child_directory'
file = open(data_dir+'\\filename.txt', 'r')

当我试图完全给出 child_diectory 的路径时,它导致了错误。例如在这种情况下:

file = open('child_directory\\filename.txt', 'r')

结果出错。但我认为它必须有效,否则我的做法有些错误,但它对我不起作用。about 方法总是有效的。

于 2018-04-21T10:36:35.840 回答
0

正如错误消息所说,您的应用程序无权从目录中读取。当您作为一个用户创建目录并作为另一个用户运行脚本时,可能会出现这种情况。

于 2012-11-04T22:52:39.713 回答
0

对于像我这样查看已接受答案但不理解为什么它不起作用的人,您需要在子目录周围添加引号,在绿色选中的示例中,

x_file = open(os.path.join(direct, "5_1.txt"), "r")  

实际上应该是

x_file = open(os.path.join('direct', "5_1.txt"), "r")   
于 2016-09-01T22:18:36.423 回答