Импортировать файлы не в текущем рабочем каталоге
Допустим, программа запрашивает у пользователя имя файла для чтения, а затем файл для записи обработанных данных.
Есть ли способ получить каталог нужного файла, чтобы программа могла изменить текущий каталог, чтобы использовать его? Или есть другой способ получить доступ к этому файлу?
3 ответа
Welp, это мой первый ответ на SO, так что, надеюсь, я не пойму вопрос неправильно и начну плохо. Тут ничего не происходит...
Откровенно говоря, не так уж много можно сказать, чем предыдущие комментарии и ответы. Хотя существуют "переносимые" способы "запросить" путь относительно вашего текущего рабочего каталога, такой выбор дизайна не так явно выражен, особенно в отношении того, что, по мнению пользователя, происходит. Если бы все это было закулисным манипулированием файлами, это одно, но в этом случае я, как и другие, рекомендую вам запросить полный путь к файлам для чтения и записи. Ради полноты вы можете начать с этого:
# responses should be of the form
# full/path/from/home/directory/to/file/my_read_and_write_files.txt
fileToReadPath = input("Provide the full path to your read file: ")
fileToWritePath = input("Provide the full path to your write file: ")
with open(fileToReadPath, 'r') as readFile, open(fileToWritePath, 'w') as writeFile:
# do stuff with your files here!
# e.g. copy line by line from readFile to writeFile
for line in readFile:
writeFile.write(line)
Обратите внимание, что менеджер контекста (with
) автоматически закроет файлы для вас, когда вы закончите. Для таких простых вещей, как эта, я думаю, что ссылка выше, этот раздел о модуле os и этот раздел о самом IO документации по python довольно хорошо объясняют ваши варианты и пример с игрушкой.
Если пользователь вводит полный путь к файлу с каталогом, вы можете проанализировать его (используя sys.path), а затем os.chdir().
Вы могли бы сделать это еще проще для пользователя, используя Tkinter, запрашивая у них окно загрузки файла, вместо того, чтобы просить его ввести его. Когда они выбирают файл, он дает вам полный путь к файлу.
from tkinter import filedialog
# this gives you the full file path
filepath = askopenfilename()
print filepath
# or do whatever you want with the file path
Не говоря уже о том, что запрос пользователей ввести полный путь к файлу вызовет проблемы, но из личного опыта не каждый дает вам желаемый ввод (не говоря уже о том, что не каждый знает синтаксис пути к файлу), и этот пример уменьшит ошибку поле.