如何使用pathlib

时间:2019-05-26 13:16:26

标签: python python-3.x pathlib

我正在尝试在Python中使用相对路径,并且我想将csv文件与python代码放在​​单独的文件夹中。

我的python程序位于以下文件夹中:

G:\projects\code

我想读取此文件,该文件是上一级的:

G:\projects\data\sales.csv

如何使用 pathlib 指定比当前工作文件夹高一级的路径?我不想更改当前的工作文件夹。

我尝试过:

from pathlib import Path
file = Path.cwd() /'..'/'data'/'sales.csv'

但是现在'file'变量等于:

'G:/projects/code/../data/sales.csv'

我通读了docs,但那里没有解释,或者我只是想念它。

3 个答案:

答案 0 :(得分:2)

尽管路径中包含“ ..”(这仍然是一个问题)(您仍然可以使用此路径在Python中打开文件等),但是您可以使用resolve()来标准化该路径:

from pathlib import Path
path = Path.cwd() / '..' / 'data' / 'sales.csv'
print(path)  # WindowsPath('G:/projects/code/../data/sales.csv')
print(path.resolve())  # WindowsPath('G:/projects/data/sales.csv')

NB:我个人将命名一个包含路径path而不是file的变量。这样您以后就可以file = open(path)了。

答案 1 :(得分:0)

您是说“读取我的csv文件”吗?

import关键字在Python中具有不同的含义(仅导入其他Python模块)。

无论如何,为了读取位于Python文件上方一个文件夹的文件,您可以使用以下方法:

import os
filePath = os.path.dirname(__file__)+'/../'+fileName
fileDesc = open(filePath)
fileData = fileDesc.read()
fileDesc.close()
...

答案 2 :(得分:0)

char buf[100000];
char* L = buf;
char* R = buf;

char non_fancy_getchar()
{
    if (L == R) {
        /* reset pointers and try to read stdin again */
        L = buf;
        R = L + fread(buf, 1, sizeof(buf), stdin);
    }

    /* return next char or EOF */
    return (L == R) ? EOF : *L++;
}

产生

print(
    Path(__file__).parent,  # the folder
    Path(__file__).parent.parent,  # the folder's parent
    sep='\n'
)

print(
    Path(
        Path(__file__).parent.parent, 'hello.py'
    )
)

具有此文件结构

C:\Users\isik\Desktop\Python\MessAround\project\module
C:\Users\isik\Desktop\Python\MessAround\project
C:\Users\isik\Desktop\Python\MessAround\project\hello.py

当代码位于-project -module -__init__.py -hello.py -__init__.py

中时