鱼C论坛

 找回密码
 立即注册
查看: 2962|回复: 5

[已解决]关于python30课的chdir()函数和listdir()函数的理解求助

[复制链接]
发表于 2019-11-25 23:56:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 icewin 于 2019-11-25 23:57 编辑

我不是很理解os模块中的chdir(path)函数有什么用,感觉可以改变os模块其他函数默认路径(运行.py文件所在的文件夹),有大佬能通俗易懂解释一下吗?
最关键还有就是使用listdir()函数的时候里面路径有时有用有时不能生效问题!!!希望大佬指点下萌新。

我的代码和改路径的小甲鱼代码

我的代码和改路径的小甲鱼代码

这个是我的代码(左边30.2)和课后答案改了路径代码跑的结果,课后答案那个为什么不能跑起来?

小甲鱼代码加chdir后

小甲鱼代码加chdir后

这个是增加了chdir()的效果,可以跑指定目录了,但是原因是什么?

附上代码
  1. import os
  2.                            #加os.chdir('f:\\课堂练习')才能跑指定目录
  3. all_files = os.listdir() # 这个括号放指定目录无效,是什么原因,空的是跑py文件所在目录
  4. file_dict = dict()

  5. for each_file in all_files:
  6.     if os.path.isfile(each_file):
  7.         file_size = os.path.getsize(each_file)
  8.         file_dict[each_file] = file_size

  9. for each in file_dict.items():
  10.     print('%s【%dBytes】' % (each[0], each[1]))
复制代码

以上课后习题代码
============================
我的代码可以直接调用os.listdir()到指定路径,想不通
  1. def folder():
  2.     import os
  3.     path1='f:\\课堂练习'  #一级目录
  4.    
  5.     f=os.listdir(path1)
  6.     for f1 in f :
  7.         if '.'not in f1:
  8.             continue
  9.         f2=path1+'\\'+f1
  10.         path2=open(f2)
  11.         s=path2.seek(0,2)
  12.         print(f1,'【',s,'Bytes】')
  13.         path2.close()
  14. folder()
复制代码
最佳答案
2019-11-26 01:14:49
本帖最后由 jackz007 于 2019-11-26 01:17 编辑

        os . chdir() 函数改变当前磁盘路径,当前磁盘路径是什么?好比要复制 Windows 记事本程序,我们知道,这个文件的路径是 "C:\\Windows\\System32\\NotePad.exe" 。那么,首先,要用资源管理器点开 "C:\\Windows\\System32" 这个路径,然后,就可以在里面找到 "NotePad.exe" 。然后,把它拖到目标磁盘的指定路径下就完成了文件复制。那么,为了找到文件 "C:\\Windows\\System32\\NotePad.exe",来到 "C:\\Windows\\System32" 的行为,就是改变当前路径,在 Python 中,可以通过 os . chdir("C:\\Windows\\System32" ) 来做到。
      在当前路径下(例如:"C:\\Windows\\System32"),对所有的文件操作,例如,打开文件,执行程序,获取文件日期、长度等操作只要通过文件名(例如:"NotePad.exe"),不用带绝对路径就可以正常操作。但是,一旦离开这个目录("C:\\Windows\\System32"),如果需要访问 "NotePad.exe" 那就必须带上绝对路径  "C:\\Windows\\System32\\NotePad.exe" 操作系统才能定位到这个磁盘文件。
      我的天,一个简单概念解释起来真是费劲!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-26 13:53:58 | 显示全部楼层
jackz007 发表于 2019-11-26 13:19
完全听不懂你的意思,os . listdir(path) 这个 path 可以是绝对路径('C:\\Windows\\System32'), ...

QQ浏览器截图20191126135004.png
分步筛查找到原因了,出现问题不是os.listdir()的锅,是后面os.path.isfile()这里路径对不上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-26 01:14:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-26 01:17 编辑

        os . chdir() 函数改变当前磁盘路径,当前磁盘路径是什么?好比要复制 Windows 记事本程序,我们知道,这个文件的路径是 "C:\\Windows\\System32\\NotePad.exe" 。那么,首先,要用资源管理器点开 "C:\\Windows\\System32" 这个路径,然后,就可以在里面找到 "NotePad.exe" 。然后,把它拖到目标磁盘的指定路径下就完成了文件复制。那么,为了找到文件 "C:\\Windows\\System32\\NotePad.exe",来到 "C:\\Windows\\System32" 的行为,就是改变当前路径,在 Python 中,可以通过 os . chdir("C:\\Windows\\System32" ) 来做到。
      在当前路径下(例如:"C:\\Windows\\System32"),对所有的文件操作,例如,打开文件,执行程序,获取文件日期、长度等操作只要通过文件名(例如:"NotePad.exe"),不用带绝对路径就可以正常操作。但是,一旦离开这个目录("C:\\Windows\\System32"),如果需要访问 "NotePad.exe" 那就必须带上绝对路径  "C:\\Windows\\System32\\NotePad.exe" 操作系统才能定位到这个磁盘文件。
      我的天,一个简单概念解释起来真是费劲!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-26 12:55:15 | 显示全部楼层
本帖最后由 icewin 于 2019-11-26 13:10 编辑
jackz007 发表于 2019-11-26 01:14
os . chdir() 函数改变当前磁盘路径,当前磁盘路径是什么?好比要复制 Windows 记事本程序,我们知 ...


哈哈,辛苦了,理解深入了一些,但是你仔细观察一下我发的这2个代码
all_files = os.listdir() # 这个括号放指定目录无效,是什么原因,空的是跑py文件所在目录这个按你的意思就是配合chdir完美使用,我也试过,切实可行。(不用chdir()直接把路径放到listdir()就跑不起来)
但我写的那个没有用chdir()直接就能到指定路径, 同样可以把程序跑起来,效果一样,这个才是我不明白的关键位置
QQ浏览器截图20191126130745.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-26 13:19:44 | 显示全部楼层
icewin 发表于 2019-11-26 12:55
哈哈,辛苦了,理解深入了一些,但是你仔细观察一下我发的这2个代码
all_files = os.listdir() # 这个 ...


      完全听不懂你的意思,os . listdir(path) 这个 path 可以是绝对路径('C:\\Windows\\System32'),也可以是相对路径,假如执行过 os . chdir('C:\\Windows'),那么,os . listdir('System32') 的效果和 os . listdir('C:\\Windows\\System32') 的效果完全相同,当然,path 也可以缺省,如果缺省列出的就是当前目录的内容。
      你所谓的 "这个括号指定目录无效" 这个判断是根据什么现象得出的?你 "括号指定的目录" 是绝对路径还是相对路径?这个路径真实存在吗。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-26 13:59:18 | 显示全部楼层
jackz007 发表于 2019-11-26 13:19
完全听不懂你的意思,os . listdir(path) 这个 path 可以是绝对路径('C:\\Windows\\System32'), ...

非常感谢,终于把相对路径和绝对路径的皮毛撸亮了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-7-22 19:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表