【Kaggle】初学者几个冷门的操作总结

您所在的位置:网站首页 输出路径是什么 【Kaggle】初学者几个冷门的操作总结

【Kaggle】初学者几个冷门的操作总结

2024-07-17 15:50| 来源: 网络整理| 查看: 265

文章目录 一、如何看当前的目录?二、Kaggle如何切换路径?三、与包安装或设置有关的错误四、如何把 Kaggle 上的 input 数据转到 output 中?

一、如何看当前的目录?

在 Linux 中,你可以使用 pwd 命令来查看当前所在的目录。“pwd” 代表 “Print Working Directory”,它会显示出当前工作目录的路径。

要查看当前目录,请按照以下步骤操作:

打开终端,以进入命令行界面。输入 pwd 命令,然后按下回车。系统将显示当前目录的绝对路径,例如 /home/user/Documents。这表示你当前位于名为 “Documents” 的文件夹下。

请注意,Linux 中的路径可以是相对路径或绝对路径。相对路径是相对于当前目录的路径,而绝对路径是从根目录开始的完整路径。pwd 命令始终显示绝对路径。

在Kaggle中的操作为:

!pwd

输出结果为:

在这里插入图片描述

二、Kaggle如何切换路径?

在 Kaggle 上,你可以通过以下步骤切换到输入数据的路径:

在 Kaggle 网站上打开你的 Kernel(或者 Notebook)。点击右侧的 “Data” 选项卡,它会显示出可用的输入数据集。在 “Data” 选项卡下,你会看到一个名为 kaggle 的目录。输入数据集通常会被挂载到此目录下。使用以下命令切换到输入数据的路径: import os input_path = "/kaggle/input" os.chdir(input_path)

这将把当前工作目录更改为输入数据的路径 /kaggle/input。现在你可以通过该路径访问输入数据集中的文件。

请注意,如果你使用的是 Kaggle Notebook,则输入数据集会自动挂载到 /kaggle/input 目录下。但是,如果你使用的是 Kaggle Kernel,则需要将输入数据集手动添加到 Notebook 设置中,并且在切换到输入数据路径之前,你需要等待输入数据集加载完成。

在这里插入图片描述

三、与包安装或设置有关的错误

我在安装包的过程中,用到了这样的命令:

!python -m pip install -e regionclip-main

但是代码报错:

Obtaining file:///kaggle/input/regionclip-main Preparing metadata (setup.py) ... error error: subprocess-exited-with-error × python setup.py egg_info did not run successfully. │ exit code: 1 ╰─> [21 lines of output] Traceback (most recent call last): File "/kaggle/input/regionclip-main/setup.py", line 174, in get_model_zoo_configs os.symlink(source_configs_dir, destination) OSError: [Errno 30] Read-only file system: '/kaggle/input/regionclip-main/configs' -> '/kaggle/input/regionclip-main/detectron2/model_zoo/configs' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "", line 2, in File "", line 34, in File "/kaggle/input/regionclip-main/setup.py", line 202, in package_data={"detectron2.model_zoo": get_model_zoo_configs()}, File "/kaggle/input/regionclip-main/setup.py", line 177, in get_model_zoo_configs shutil.copytree(source_configs_dir, destination) File "/opt/conda/lib/python3.10/shutil.py", line 559, in copytree return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, File "/opt/conda/lib/python3.10/shutil.py", line 457, in _copytree os.makedirs(dst, exist_ok=dirs_exist_ok) File "/opt/conda/lib/python3.10/os.py", line 225, in makedirs mkdir(name, mode) OSError: [Errno 30] Read-only file system: '/kaggle/input/regionclip-main/detectron2/model_zoo/configs' [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details.

这似乎是一个与包安装或设置有关的错误,而不是路径切换问题。以下是一些可能的解决方法:

检查输入数据集和依赖项: 确保你正确添加了输入数据集,并且依赖项和所需的文件都在正确的位置。可能有一些文件或配置缺失或被放置在了不正确的位置。检查文件系统权限: 错误信息中提到了 “Read-only file system”,这可能意味着你没有足够的权限在该路径下创建或修改文件。在 Kaggle 上,输入数据集通常是只读的,因此你可能无法修改其中的文件。你可以尝试将文件复制到其他目录中,并在该目录下进行操作。联系包的作者或提供者: 错误信息中还提到了 setup.py 文件的错误,这可能是包的安装过程中出现了问题。 四、如何把 Kaggle 上的 input 数据转到 output 中?

在 Kaggle 上,你可以使用以下步骤将输入数据转移到输出目录中:

在 Kaggle 网站上打开你的 Kernel(或者 Notebook)。在 Notebook 中,通过以下代码获取输入数据的路径: import os import shutil input_path = "/kaggle/input" 然后,使用以下代码创建一个输出目录并将输入数据复制到输出目录中: output_path = "/kaggle/working/output" os.makedirs(output_path, exist_ok=True) # 复制输入数据到输出目录 input_files = os.listdir(input_path) for file in input_files: source = os.path.join(input_path, file) destination = os.path.join(output_path, file) shutil.copyfile(source, destination)

以上代码会在输出目录 /kaggle/working/output 中创建与输入数据相同的文件,并将输入数据复制到输出目录中。你可以根据需要修改输出目录的路径。

请确保你有足够的磁盘空间来存储复制的文件,并注意一些大型文件可能需要较长的时间进行复制。

完成后,你可以在输出目录中访问并处理这些数据。

发现报错:

IsADirectoryError: [Errno 21] Is a directory: '/kaggle/input/regionclip-main'

完整的报错信息为:

--------------------------------------------------------------------------- IsADirectoryError Traceback (most recent call last) Cell In[8], line 13 11 source = os.path.join(input_path, file) 12 destination = os.path.join(output_path, file) ---> 13 shutil.copyfile(source, destination) File /opt/conda/lib/python3.10/shutil.py:254, in copyfile(src, dst, follow_symlinks) 252 os.symlink(os.readlink(src), dst) 253 else: --> 254 with open(src, 'rb') as fsrc: 255 try: 256 with open(dst, 'wb') as fdst: 257 # macOS IsADirectoryError: [Errno 21] Is a directory: '/kaggle/input/regionclip-main'

这个错误表明你正在尝试复制一个目录而不是一个文件。shutil.copyfile() 函数用于复制文件,而不是目录。

如果你想将整个输入目录复制到输出目录中,你可以使用 shutil.copytree() 函数来完成。以下是更新后的代码示例:

import os import shutil input_path = "/kaggle/input/regionclip-main" output_path = "/kaggle/working/output" shutil.copytree(input_path, output_path)

使用 shutil.copytree() 函数,你可以直接复制整个目录,包括其中的文件和子目录。

再次报错:

--------------------------------------------------------------------------- FileExistsError Traceback (most recent call last) Cell In[9], line 7 4 input_path = "/kaggle/input/regionclip-main" 5 output_path = "/kaggle/working/output" ----> 7 shutil.copytree(input_path, output_path) File /opt/conda/lib/python3.10/shutil.py:559, in copytree(src, dst, symlinks, ignore, copy_function, ignore_dangling_symlinks, dirs_exist_ok) 557 with os.scandir(src) as itr: 558 entries = list(itr) --> 559 return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, 560 ignore=ignore, copy_function=copy_function, 561 ignore_dangling_symlinks=ignore_dangling_symlinks, 562 dirs_exist_ok=dirs_exist_ok) File /opt/conda/lib/python3.10/shutil.py:457, in _copytree(entries, src, dst, symlinks, ignore, copy_function, ignore_dangling_symlinks, dirs_exist_ok) 454 else: 455 ignored_names = set() --> 457 os.makedirs(dst, exist_ok=dirs_exist_ok) 458 errors = [] 459 use_srcentry = copy_function is copy2 or copy_function is copy File /opt/conda/lib/python3.10/os.py:225, in makedirs(name, mode, exist_ok) 223 return 224 try: --> 225 mkdir(name, mode) 226 except OSError: 227 # Cannot rely on checking for EEXIST, since the operating system 228 # could give priority to other errors like EACCES or EROFS 229 if not exist_ok or not path.isdir(name): FileExistsError: [Errno 17] File exists: '/kaggle/working/output'

输出目录 ‘/kaggle/working/output’ 已经存在,并且你希望覆盖其中的内容,可以使用 shutil.rmtree() 函数删除现有目录,然后再执行复制操作。请注意,这将删除输出目录中的所有内容,请确保你已经备份了重要的数据。

以下是更新后的代码示例:

import os import shutil input_path = "/kaggle/input/regionclip-main" output_path = "/kaggle/working/output" # 删除现有的输出目录 if os.path.exists(output_path): shutil.rmtree(output_path) # 复制目录 shutil.copytree(input_path, output_path)

通过在复制之前删除现有目录,你可以避免 FileExistsError。请确保仔细评估是否需要删除现有目录,以及确认没有重要的数据将被删除。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3