xlabel位置 - 在Python中的相对位置打开文件




plt文字 (5)

Python只是将你给它的文件名传递给操作系统,这会打开它。 如果你的操作系统支持像main/2091/data.txt这样的相对路径(提示:确实如此),那么就可以正常工作。

你可能会发现,回答这个问题最简单的方法就是尝试一下,看看会发生什么。

https://code.i-harness.com

假设python代码在先前的windows目录中并不知道的地方执行,比如'main',并且在运行代码的任何地方需要访问目录'main / 2091 / data.txt'。

我应该如何使用open(位置)功能? 什么位置应该?

编辑:

我发现,简单的代码下面会工作..它有什么缺点吗?

    file="\2091\sample.txt"
    path=os.getcwd()+file
    fp=open(path,'r+');

不知道这是否到处都有效。

我在ubuntu上使用ipython。

如果您想读取当前文件夹的子目录中的文件:

/current-folder/sub-directory/data.csv

你的脚本在当前文件夹中,只需试试这个:

import pandas as pd
path = './sub-directory/data.csv'
pd.read_csv(path)

我创建了一个帐户,以便我可以澄清我认为我在Russ的原始回复中找到的差异。

作为参考,他的原始答案是:

import os
script_dir = os.path.dirname(__file__)
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)

这是一个很好的答案,因为它试图动态创建一个到期望文件的绝对系统路径。

Cory Mawhorter注意到__file__是一个相对路径(在我的系统中也是如此),并且使用os.path.abspath(__file__)建议。 但是, os.path.abspath返回当前脚本的绝对路径(即/path/to/dir/foobar.py

要使用这种方法(以及我最终如何工作),必须从路径末尾删除脚本名称:

import os
script_path = os.path.abspath(__file__) # i.e. /path/to/dir/foobar.py
script_dir = os.path.split(script_path)[0] #i.e. /path/to/dir/
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)

生成的abs_file_path(在本例中)变为: /path/to/dir/2091/data.txt


有了这种类型的事情,你需要小心你的实际工作目录是什么。 例如,您不能从文件所在的目录运行脚本。在这种情况下,您不能仅使用相对路径。

如果你确定你想要的文件位于脚本实际所在位置的子目录下,你可以使用__file__来帮助你。 __file__是您正在运行的脚本所在位置的完整路径。

所以你可以摆弄这样的东西:

import os
script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)

这取决于您使用的操作系统。 如果你想要一个兼容Windows和* nix的解决方案,如:

from os import path

file_path = path.relpath("2091/data.txt")
with open(file_path) as f:
    <do stuff>

应该工作正常。

path模块能够为其运行的任何操作系统格式化路径。 此外,只要你有正确的权限,python处理相对路径就好了。

编辑

正如评论中的kindall所提到的,python可以在unix风格和windows风格的路径之间进行转换,所以即使简单的代码也可以工作:

with open("2091/data/txt") as f:
    <do stuff>

这就是说, path模块仍然有一些有用的功能。







path