【Python】 os.listdir 引发的思考,Windows 中c: 与 c:\ 的不同

1,问题来源

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
那么以下这段代码的输出结果会是如何?
import os
dpath = 'E:'
path = 'E:\\'
print(os.getcwd())    # 当前工作目录  E:\jupyter
print(dpath,os.listdir(dpath))
print(path,os.listdir(path))

对于 os.listdir(dpath) 与 os.listdir(path) 的结果,大家可能会觉得都是输出E盘下的所有文件或文件夹的名字,但是事实并非大家所想那样!!!

print(dpath,os.listdir(dpath))   # 输出 当前工作目录下的所有文件或文件夹的名字
print(path,os.listdir(path))  # 输出 E盘下的所有文件或文件夹的名字

是不是觉得有点意外,反正我是觉得很意外,可能我比较菜吧,应该有大神看出原因了!

2,原因所在

这里要说明下demo中的dpath ,path 和当期工作目录都在同个磁盘下,即都在E盘,,在网上搜了下,stackoverflow已经有人提出过这个问题了,
链接:https://stackoverflow.com/questions/7258993/pythons-os-listdir-behaviour-on-windows/7259040#7259040

出现这种情况的原因不在Python,这本质上是一个Windows问题。在Windows中C:和C;\(或者C:/)代表着不同的意思!
C: 表示C驱动器上的当前目录:
C:(和C:/) 表示C驱动器的根目录:

所以os.listdir(dpath) 输出的实际是E盘上当前目录(E:\jupyter)的所有文件或文件夹的名字。而os.listdir(path) 输出的实际是E盘根目录(E:\)下所有文件或文件夹的名字。
如果还不理解,可以在dos 中演示一波
在这里插入图片描述
当前目录 C:\Users\yang
cd c:切换后,仍然是在 C:\Users\yang 这个目录下
cd c:\ 切换后,目录就变成了C:\

注意:刚才有说明demo中的dpath ,path 和当期工作目录都在同个磁盘下,那如果和当前工作目录不同呢?结果如何?

import os
dpath = 'D:'
path = 'D:\\'
print(os.getcwd())
print(dpath,os.listdir(dpath))    
print(path,os.listdir(path))

此时 os.listdir(dpath) 和 os.listdir(path)的输出结果一致,都是D盘根目录下所有文件或文件夹的名字。

这是情况就有点奇怪了,但是这本质上是一个Windows问题,并非Python的问题,具体为什么要这样呢?这可能要问问下比尔盖茨,
所以,在涉及文件操作的时候,最好还是使用绝对路径,这是最保险的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: A:这段代码使用了Python内置的os模块listdir()函数来获取指定目录下的所有文件文件夹的名称,并且使用for循环对每一个文件文件夹进行操作。在该代码块,self.path变量代表的是当前对象的路径。因此,该循环将枚举当前对象路径下的每个文件文件夹的名称,并将它们逐一存储在file_name变量。 ### 回答2: for file_name in os.listdir(self.path)是一个循环语句,用于遍历指定路径下的所有文件文件夹。 其,self.path代表需要遍历的文件路径os.listdir()函数用于获取指定路径下的所有文件文件夹的名称,它返回一个列表。 在遍历过程,每次循环都会将列表的一个元素赋值给file_name,也就是当前遍历到的文件文件夹的名称。 通过这个循环语句,可以对指定路径下的每一个文件文件夹进行一些操作,比如打印文件名、对文件进行处理等。 具体操作可以在循环语句的内部进行,通过file_name这个变量来操作当前遍历到的文件文件夹。 循环会依次遍历列表的每一个元素,直到遍历完所有的文件文件夹,循环结束。 综上所述,这段代码用于遍历指定路径下的所有文件文件夹,对每个文件文件夹执行指定的操作。 ### 回答3: 对于给定的文件路径, 使用os.listdir()函数可以获得路径下所有文件文件夹的列表。然后,使用for循环对列表的每个元素进行迭代,并将当前迭代的元素命名为file_name。 此行代码在一个定义了self.path属性的类使用,意味着self.path是类的一个实例变量,表示文件路径os.listdir()函数将返回路径下所有文件文件夹的列表,包括隐藏文件。 由于使用了for循环遍历列表的每个元素,因此在每次迭代过程,file_name将分别表示列表的一个文件文件夹的名称。 可以在循环的每次迭代,对file_name进行一些操作,如判断是否为文件文件夹,读取文件内容或对文件进行处理等。通过使用os.path模块的方法,可以进一步获取文件信息和路径,并进行相应的操作。 总之,使用该代码行可遍历指定路径下的所有文件文件夹,并对每个文件文件夹进行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值