python - 为什么我的代码返回脚本路径而不是绝对文件路径?
问题描述
我在 Python 中遇到了一个让我发疯的小问题。我的代码包含一个非常简单的os.walk()
函数,它应该在测试文件夹中找到所有文件及其路径(这个测试文件夹由各种子文件夹组成)。
import os
src=r"C:\Users\j2the\Documents\Test3"
for dirpath,dirnames,filenames in os.walk(src):
for e in filenames:
print(e)
print(os.path.abspath(e))
现在,当我运行代码时,它会打印正确的文件名。但是,即使我使用了os.path.abspath()
语句,返回的文件路径始终是我的pycharm项目的脚本路径,也就是说"C:\Users\j2the\PycharmProjects\..."
.
那么为什么 Python 返回脚本路径而不是文件的绝对路径,应该是这样的"C:\Users\j2the\Documents\Test3\..."
?
注意:我的 Pycharm 配置不是问题,因为我在 IDLE 上运行了相同的代码,它仍然返回脚本路径
在此先感谢您的帮助!:)
解决方案
该变量e
只是文件名的字符串。它不包含任何关于它在哪里的信息。如果我们将其与以下文档abspath
相结合:
返回路径名路径的规范化绝对版本。在大多数平台上,这相当于调用函数 normpath(),如下所示:normpath(join(os.getcwd(), path))。
因此path
equals e
,它只是一个文件名,比如说my_file.txt
。并且os.getcwd()
是运行脚本的路径。
查看的文档os.walk
,我们可以看到:
dirpath 是一个字符串,是目录的路径。dirnames 是 dirpath 中子目录名称的列表(不包括 '.' 和 '..')。filenames 是 dirpath 中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。要获得 dirpath 中文件或目录的完整路径(以 top 开头),请执行 os.path.join(dirpath, name)。
*我的重点
现在我们可以结合这两个知识并产生这个:
import os
src=r"C:\Users\j2the\Documents\Test3"
for dirpath,dirnames,filenames in os.walk(src):
for e in filenames:
print(e)
print(os.path.abspath(os.path.join(dirpath, e)))
推荐阅读
- awk - 如何使用 sed 和 grep 修复我的文件
- docker - 在 Docker Toolbox 中运行容器后 URL 不起作用
- flutter - 解析军事时间以翻倍
- c++ - 如何从 vkEnumeratePhysicalDevices 返回一个 VkPhysicalDevice
- autohotkey - AutoHotKey - 如何引用当前目录中的文件?
- javascript - 客户端密码和 ID 将在未来几个月内弃用
- javascript - 我有对象数组,它需要根据条件返回总和数组
- node.js - 对 AWS Step Function 执行进行排队的最佳方式是什么?
- python - 运行时错误“imageio.mimread() has read over 256 MiB of”背后的原因是什么?
- c# - Xamarin 表单 - Wordpress REST API - 查看用户名和密码