搜索
简帛阁>技术文章>python 文件路径问题

python 文件路径问题

需要用到 os 模块和 sys 模块#

?
1
2
3
4
5
6
7
8
9
10
11
12
13
import os
print(__file__)# 输出相对路径
print(os.path.abspath(__file__)) #输出绝对路径
# D:\Project\180410gentic\Rahul_Genetic_Program\analysis\test.py
 
print os.path.dirname(os.path.abspath(__file__)) #返回目录名不要文件名
# D:\Project\180410gentic\Rahul_Genetic_Program\analysis
 
import sys
 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 设为基本路径
 
sys.path.append(BASE_DIR) #将路径添加环境变量 

os.walk目录遍历#

?
1
os.walk(top, topdown=True, onerror=None, followlinks=False)

- top是要遍历的目录。 
- topdown是代表要从上而下遍历还是从下往上遍历。 
- onerror可以用来设置当遍历出现错误的处理函数(该函数接受一个OSError的实例作为参数),设置为空则不作处理。 
- followlinks表示是否要跟随目录下的链接去继续遍历,要注意的是,os.walk不会记录已经遍历的目录,所以跟随链接遍历的话有可能一直循环调用下去。

os.walk返回的是一个3个元素的元组 (root, dirs, files) ,分别表示遍历的路径名,该路径下的目录列表和该路径下文件列表。注意目录列表和文件列表不是具体路径,需要具体路径(从root开始的路径)的话可以用 os.path.join(root,dir)和 os.path.join(root,dir) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
├── a.py
├── b.py
├── c.py
├── dir1
│   ├── dir4
│   │   ├── g.py
│   │   └── h.py
│   ├── dirx
│   │   ├── diry
│   │   │   └── k.py
│   │   └── z.py
│   ├── e.py
│   ├── f.py
│   └── g.py
├── dir2
│   ├── dira
│   │   └── dirb
│   │       └── dirc
│   │           └── aha.py
│   ├── k.py
│   ├── l.py
│   └── m.py
└── dir3
    ├── dir5
    │   └── z.py
    ├── x.py
    └── y.py
 
10 directories, 17 files  

测试topdown#

当我用 os.walk 遍历这个目录时,程序和输出如下:

?
1
2
3
4
5
6
7
8
9
import os
 
path = '/Users/nisen/Projects/python_advanced_class/test/test_os_walk'
 
for root, dirs, files in os.walk(path, True):
    print('root: %s' % root)
    print('dirs: %s' % dirs)
    print('files: %s' % files)
    print (' ')

  结果如下,从root的路径可以看出遍历是自上而下的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
dirs: ['dir1', 'dir2', 'dir3']
files: ['a.py', 'b.py', 'c.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
dirs: ['dir4', 'dirx']
files: ['e.py', 'f.py', 'g.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
dirs: []
files: ['g.py', 'h.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
dirs: ['diry']
files: ['z.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
dirs: []
files: ['k.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
dirs: ['dira']
files: ['k.py', 'l.py', 'm.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
dirs: ['dirb']
files: []
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
dirs: ['dirc']
files: []
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
dirs: []
files: ['aha.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
dirs: ['dir5']
files: ['x.py', 'y.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
dirs: []
files: ['z.py']

  而当设置os.walk的topdown为False时,结果如下, 可以看出他是自上而下遍历的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4
dirs: []
files: ['g.py', 'h.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry
dirs: []
files: ['k.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx
dirs: ['diry']
files: ['z.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1
dirs: ['dir4', 'dirx']
files: ['e.py', 'f.py', 'g.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc
dirs: []
files: ['aha.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb
dirs: ['dirc']
files: []
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira
dirs: ['dirb']
files: []
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2
dirs: ['dira']
files: ['k.py', 'l.py', 'm.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5
dirs: []
files: ['z.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3
dirs: ['dir5']
files: ['x.py', 'y.py']
 
root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk
dirs: ['dir1', 'dir2', 'dir3']
files: ['a.py', 'b.py', 'c.py']

  os.path.join()函数用于路径拼接文件路径#

  • 会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃。

  • 以上一种情况为先。在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接

?
1
2
3
4
5
6
7
8
9
10
11
import os
 
print("1:",os.path.join('aaaa','/bbbb','ccccc.txt'))
 
print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt'))
 
print("3:",os.path.join('aaaa','./bbb','ccccc.txt'))
 
# 1: /bbbb\ccccc.txt
# 2: /ccccc.txt
# 3: aaaa\./bbb\ccccc.txt

  

1,有时看类似pdread_excel(),pdread_csv()中路径写的不完整,不是绝对路径,就很纳闷,为什么能读取到正确的文件呢?网友A分享:如果你的excel文件跟py文件在一个文件夹,那就
pathtestdocx以工程下venv文件夹为父目录补充:Python读取指定目录下指定后缀文件并保存为docx最近有个奇葩要求要项目中的N行代码申请专利啥的然后作为程序员当然不能复制粘贴用代码解
Python在读取文件内容时的路径问题,值得深究一下我想讨论的重点还是在绝对路径上面在这之前我们先看一下1:相对路径这张图演示了在相对路径下寻找查找指定文件open('相对路径演示'\'相对路径示例
externCWinApptheApp;charszAppName[MAX_PATH];::GetModuleFileName(theAppm_hinstance,szAppName,MAX_PATH
在使用python通过open()函数来打开文件的时候,传递绝对路径给open()的时候,发现路径参数的内容与想象中的有所出入:由于windows的路径分隔符使用的是反斜杠\,它刚刚好是转义字符,故
问题描述python中使用open打开某个文件写入时,往往会发现需要写入的文件不在同级目录下。这样就需要根据文件路径来找到并打开。但往往有时绝对路径和相对路径,写入不正确就会打开失败。二解决方法1
已经遇到过很多次在python中读取文件文件路径中反斜杠使用不标准导致系统无法准确识别路径问题了。通常这种情况需要在下例中特别注意:file_pathD:\notebook\testtxt错误fi
下面就来说说解决方案吧~importosimportsyscurPathospathabspath(ospathdirname(__file__))rootpathstr(curPath)syspat
目录结构:simpledatadatajsonsearchfeedgo具体代码:constdataFile/data/datajson_,filename,_,_:runtimeCaller(1)da
Python中‘unicodeescape'codeccan'tdecodebytesinpositionXXX:trun错误解决方案背景描述今天在运用Pythonpillow模块处理图片时遇到一个错