【问题标题】:Unable to access file in home directory (Jupyter Notebook)无法访问主目录中的文件(Jupyter Notebook)
【发布时间】:2018-04-30 00:07:14
【问题描述】:

我正在尝试创建一个简单的 Jupyter Notebook here。在我的代码中,我必须加载一个文件 file.txt 放在 home 的 /data 目录中

data/file.txt

代码

open('data/file.txt', 'r')

open('~/data/file.txt', 'r')

我遇到了一个错误

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'~/data/file.txt'

【问题讨论】:

  • @snakecharmerb 我怎样才能得到myusername。我尝试从 url 获取用户名,但它不起作用。 https://hub.mybinder.org/user/ipython-ipython-in-depth-xxxx/notebooks/binder/Index.ipynb#。路径/home/ipython-ipython-in-depth-xxxx/data/file.txt

标签: python jupyter-notebook


【解决方案1】:

您可以使用os.path.expanduser 函数访问您的主目录以获取主目录的名称。

import os
import os.path

# Create data directory
try:
    os.makedirs(os.path.join(os.path.expanduser('~'), 'data'))
except OSError:
    pass

# Write to file
with open(os.path.join(os.path.expanduser('~'), 'data/file.txt'), 'w') as f:
    f.write('Hello world')

# Read from file    
with open(os.path.join(os.path.expanduser('~'), 'data/file.txt')) as f:
    print(f.read())

Hello world

【讨论】:

  • 我注意到Index.ipynbbinder 目录中,所以我将data 目录移动到binder 目录中并且它起作用了。
【解决方案2】:

默认情况下,Jupyter 笔记本始终在启动笔记本的目录上运行,因此您应该通过文件的相对路径 (./) 引用该文件

例如。这有效:

with open('./data/file.txt') as f:
    for line in f.readlines():
        print(line.strip())

因此,使用 ./<any_dirpath>/<file> 可以在本地 jupyter 安装上运行。

如果您使用 binder 或任何远程站点,主目录不是您的本地目录,而是远程目录,因此除非您上传正在使用的文件,否则您将无法读取它。

您可以通过运行检查当前目录:

import os
print(os.getcwd() + "\n")

【讨论】:

  • 我有点困惑 - 不应该 ~/ 给你你的家路径,不管你是什么密码?我在运行 Jupyter 笔记本的 MacOS 上遇到了同样的问题,其中 /Users/me/ 可以访问但 ~/filename 不能访问。
  • @user391339 这不是 Jupyter 问题。根据the official documentation,Python 需要一个相对或绝对文件路径,它不会将波浪号 ~ 扩展为用户家的绝对路径。为此,您应该使用:import os 然后os.path.expanduser('~')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2018-06-08
  • 1970-01-01
  • 2018-03-13
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多