彻底解决文件路径问题
彻底解决文件路径问题
一个例子
假设下面的目录下有两个文件:
D:/code/058.py
D:/code/058.txt
058.txt的内容很简单,就一句话:
跟杰哥搞定路径问题
而058.py也很简单,就是打印出这个文件的内容:
with open('058.txt') as file:print(file.read())
如果我们在D:/code目录下执行:
>>> python 058.py
可以成功地打印出文件内容:
跟杰哥搞定路径问题
这证明Python可以成功找到数据文件058.txt。
找不到文件的错误
但如果切换目录,比如在**D:/**根目录下执行命令:
>>> python code/058.py
则会得到错误:
Traceback (most recent call last):File "D:/058.py", line 1, in <module>with open('058.txt') as file:
FileNotFoundError: [Errno 2] No such file or directory: '058.txt'
错误的最后一行说:FileNotFoundError: [Errno 2] No such file or directory: ‘058.txt’
意思就是说:找不到文件或目录058.txt。
这也太脆弱了,换个目录就不能运行了。就不要说发给别人了!!!
重要知识
我们在代码中是这样写的:open(‘058.txt’)。
这告诉Python去打开文件058.txt,但并没有告诉Python去哪里找这个文件。
Python只能在运行命令的当前目录下查找这个文件。如果找不到就只能报错了。
这种写法也叫相对路径。因为你没有告诉具体的地址,所以我只能相对于你当前的目录去寻找,所以是相对路径。
另外一种是绝对路径,关于相对路径和绝对路径的概念,明天的3分钟可以再专门讲讲,请保持关注。
解决方法 - 用源代码相对路径
上面的执行之所以报错,是因为相对路径是相对于执行python命令的目录,而不是Python文件所在的目录。请注意理解这个概念。
我们第二次执行python命令是在D:盘根目录下,而文件058.txt是在D:\code目录下。所以找不到。
如果我们能够相对于python文件的路径去查找,那就好多了。只要我们保证数据文件058.txt和058.py在同一个目录下就可以了。
这是个不错的想法,我们试试看:
import pathlib
folder = pathlib.Path(__file__).parent.resolve()
print(f'当前python文件所在目录:{folder}')with open(f'{folder}/058.txt') as file:print(file.read())
现在再去执行!不管你在任何目录下执行,都能够成功地打印文件:
当前python文件所在目录:/Users/maishu/git/wx_maishucode/code
跟杰哥搞定路径问题
解释一下:
- 我们先使用pathlib库的Path类读取到当前执行的python文件的路径,其中魔术变量__file__代表当前的文件。
- 然后通过.parent()找到文件所在的目录,然后再用resolve()解析成文件字符串。代码中打印了这个字符串。
- 在打开文件的时候,通过f’{folder}/058.txt’拼接出完整的目录,这样Python就能准确地找到文件了,而且和执行python命令的目录是无关的。
职业发展
作为一个代码打工仔,对于绝大部分程序员来说,想要成为牛逼的真正挣钱程序员的路还很长,一刻都不能懈怠。
我们无法从HR角度,或者技术leader的角度来臆测哪种状态的面试更能获取面试官青睐。但通过我们积攒的大量的面试经验,大家多少可以推断一些成为有竞争力的程序员的一些必要条件。
大佬云集、资料丰富
当初我在字节认识一个非常非常资深的前辈,他到字节比我早三年,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?
他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。
而且,这些资料不是扫描版的,里面的文字都可以直接复制,非常便于我们学习:
岗位内推、学习交流
我们大量需要前端岗位、python岗位、Java 岗位、Android 和 iOS 的开发岗位,工作地点:北京字节,欢迎校招社招扫描下方二维码找我内推
Python资料、技术、课程、解答、咨询也可以直接点击下面名片,
添加官方客服斯琪
↓
彻底解决文件路径问题相关推荐
- 解决文件路径的问题的总结
构建路径: os.path 模块用来管理文件路径问题,它中包含了很多用以构建路径的函数,其中最常用的便是 join,abspath 以及 expanduser 函数: join:拼接路径(不同的操作系 ...
- java war目录_java war包 路径--解决war包中文件路径问题
https://blog.csdn.net/u013409283/article/details/51480948 转自:http://free-chenwei.iteye.com/blog/1507 ...
- windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题
之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...
- 解决JSP路径问题的方法(jsp文件开头path, basePath作用)
解决JSP路径问题的方法(jsp文件开头path, basePath作用) 参考文章: (1)解决JSP路径问题的方法(jsp文件开头path, basePath作用) (2)https://www. ...
- c#中文件路径出现非法字符怎么办?解决也容易
c#中如果需要生成文件路径,有时会抛出"文件路径中出现非法字符"的异常,这时我们就会找到这个非法的字符串,然后Replace替换掉.其实net类库提供了非法字符的数组,我们直接循环 ...
- python相对路径找不到文件_Python 解决相对路径问题:No such file or directory
如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory". 因为 python 的相对路径,相对的都是主文件. 如下目录结构: ...
- python正确读取文件路径的三种解决方法
目录 一.问题需求 二.问题原因 三.解决办法 四.小思 一.问题需求 日常用程序读取文件数据等时,常常会显示一些诸如文件路径不存在等错误信息. 二.问题原因 这类问题,在python中,主要是由于 ...
- 解决:利用IDEA的右上角图标打开jsp文件,在浏览器中打开的是“本机文件路径”,而不是“http路径”问题
解决:利用IDEA的右上角图标打开jsp文件,在浏览器中打开的是"本机文件路径",而不是"http路径"问题 一·问题描述: 二·错误原因: 三·解决方法: 方 ...
- UNIDRV.HLP文件路径,装打印机时,复制过去就解决了
EPSON打印机用的东西,有时候可能在WINDOS上添加打印机时会提示添加不起,可能是却少这个东西的过. 下载之后复制到 这个文件夹C:\WINDOWS\Driver Cache\i386就OK了. ...
最新文章
- Android 高清加载巨图方案 拒绝压缩图片
- MySQL性能测试工具sysbench的安装和使用
- The application was unable to start correctly (0xc000007b)
- MAC下载JDK及安装AndroidStudio
- python使用函数的目的_python之函数基本使用
- 32款iOS开发插件和工具介绍[效率]
- 用js来实现那些数据结构06(队列)
- 【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)
- 一个程序员的日常,简直太欢乐了!
- html5 input min,HTML Input Time min用法及代码示例
- Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题
- 六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
- 超详细TMS-EEG数据处理教程(下)
- 苹果手机怎么查看足迹_苹果手机打电话怎么录音
- 20 步打造完美网站布局设计
- SSL VPN 与 IPsec VPN
- 计算机类需不需英语口语考试,关于计算机口语测试与传统口语测试比较分析.doc...
- css3 动画之 2D旋转 3D旋转 放大
- C语言--getchar()函数超详细解析(多维度分析,小白一看就懂!!!)
- python实现批量识别图片文字,生成对应的txt文件