Подтвердить что ты не робот

Как прочитать файл в другом каталоге в Python

У меня есть файл с именем 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

Я не знаю, почему я не могу прочитать файл? Какие-либо предложения?

Благодарю.

4b9b3361

Ответ 1

Похоже, вы пытаетесь открыть каталог для чтения, как обычный файл. Многие ОС не позволят вам это сделать. Вам все равно не нужно, потому что то, что вы хотите (судя по вашему описанию),

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

или просто

x_file = open(direct+"/5_1.txt", "r")

Ответ 2

Если вы не находитесь в указанном каталоге (т.е. прямом), вы должны использовать (в linux):

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

Обратите внимание на кавычки и относительный путь к каталогу.

Это может быть ваша проблема, но у вас также нет разрешения на доступ к этому файлу. Возможно, вы пытаетесь открыть его как другого пользователя.

Ответ 3

Вы не можете "открыть" каталог с помощью функции open. Эта функция предназначена для открытия файлов.

Здесь вам нужно открыть файл, который находится в каталоге. Первое, что вам нужно сделать, это вычислить этот путь к файлу. Функция os.path.join позволит вам сделать это, соединяя части пути (каталог и имя файла):

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

Затем вы можете открыть файл:

f = open(fpath)

И прочитайте его содержимое:

content = f.read()

Кроме того, я считаю, что в Windows использование open в каталоге возвращает исключение PermissionDenied, хотя это не совсем так.

Ответ 4

Я нашел этот способ полезным также.

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

здесь появится окно, чтобы вы могли просматривать его до тех пор, пока не найдете файл, вы нажмете на него, тогда вы сможете продолжить использовать открытый и прочитанный.

from_file = open(from_filename, 'r')
contents = from_file.read()
contents

Ответ 5

Для окон вы можете либо использовать полный путь с '\\' ('/' для 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')

Приведено по ошибке. Но я думаю, что это должно работать, или я делаю это несколько неправильно, но это не работает для меня. О способе всегда работает.

Ответ 6

Как сообщение об ошибке говорит, что у вашего приложения нет разрешений на чтение из каталога. Это может быть случай, когда вы создали каталог как один пользователь и запустили script в качестве другого пользователя.

Ответ 7

Для таких людей, как я, глядя на принятый ответ и не понимая, почему он не работает, вам нужно добавить кавычки вокруг вашего подкаталога в примере с зеленым флажком,

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

должен быть

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

Ответ 8

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