Как прочитать файл в другом каталоге в 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
Я не знаю, почему я не могу прочитать файл? Какие-либо предложения?
Благодарю.
Ответы
Ответ 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 ')