当前位置: 首页 > 面试题库 >

os.path.isfile()不起作用。为什么?

长孙景焕
2023-03-14
问题内容

我正在尝试这样做:

import os
[x for x in os.listdir('.') if os.path.isfile(x)]
[x for x in os.listdir('dirname') if os.path.isfile(x)]
[x for x in os.listdir(os.path.abspath('dirname')) if os.path.isfile(os.path.abspath(x))]

第一行有效:

[x for x in os.listdir('.') if os.path.isfile(x)]

但是接下来的两个:

[x for x in os.listdir('dirname') if os.path.isfile(x)]

[x for x in os.listdir(os.path.abspath('dirname')) if os.path.isfile(os.path.abspath(x))]

只是输出 []

为什么?


问题答案:

因为你需要加入dirnamexos.listdir()只是列出了内容直接,内容不具有完整路径。

范例-

[x for x in os.listdir('dirname') if os.path.isfile(os.path.join('dirname',x))]

如果未提供完整路径,则os.path.isfile()在当前目录中搜索,因此当您给出时'.'os.listdir()将获得正确的列表。

范例-

假设某个文件夹-/a/b/c具有文件-xy在其中。

当您执行-时os.listdir('/a/b/c'),返回的列表类似于-

['x','y']

即使您在其中提供绝对路径os.listdir(),列表中返回的文件也将具有指向目录的相对路径。您将需要手动加入dirx以获得正确的结果。

在您的第三个示例中,它不起作用,因为它os.path.abspath()也适用于当前目录,因此,如果执行以下操作-

os.path.abspath('somefile')

产生的结果将是–/path/to/current/directory/somefile不会验证该文件是否为真实文件/目录。

在文档(Emphasis
mine)中明确指出-

os.path.abspath(路径)

返回路径名路径的标准化绝对化版本。在大多数平台上, 这相当于调用函数normpath()如下:normpath(join(os.getcwd(), path))

其中,os.getcwd()返回当前工作目录的路径。



 类似资料:
  • 问题内容: 我正在尝试从JSON网址获取集合。骨干网确实发送了请求并得到了响应,但是在它之后的集合中没有: 这是我的JavaScript: 响应中的JSON 响应中的Content-Type HTTP标头为。 为什么不将其加载到集合中?JSON是否正确? 一些更多的代码: 问题答案: 是异步的。尝试 要么 要么

  • 问题内容: 我有三部分字符串,每个部分用 符号分隔 。例如, 现在,当我使用这样的方法拆分它时: 它包含整个字符串作为单个元素的数组。 但是当我使用这个: 它完美的作品是什么,我想这意味着 现在的数组包含,并分别对指数0,1和2。 我想知道为什么第一次使用时不起作用,因为我在使用 问题答案: 因为字符是在正则表达式中用来标记行尾的保留令牌。因此,您必须使用进行 转义。

  • 问题内容: 我现在有点困惑。我尝试过: 并得到: 但是,我想要: 我的代码有什么问题? 问题答案: 您没有将其分配给。字符串是 不可变的 。 您需要将其分配回。

  • 我想知道两次当地约会之间的时间。我使用了下面的代码: 我有以下错误:

  • 我有一个用户和角色的存储库。两个实体在DB中有不同的表。我尝试加载像或相同的想法,但使用Spring数据与LoadGraph。但是当我调用时,我得到了异常。请帮我解决这个问题。谢谢你。 存储库: 例外: WARN: HHH000104: firstResult/max使用集合读取指定的结果;在内存中应用!Hibernate:选择不同的user0_. id作为id1_1_0_,role1_user_

  • 我有三个部分的字符串,每个部分用symbol 分隔, 现在,当我使用这样的方法拆分它时: 它数组将整个字符串作为单个元素包含。 但当我使用这个: 它完美地工作,我想要的意思是 现在数组包含,和分别在索引0,1和2上。 我想知道为什么第一个不起作用,因为我使用类似的在使用