You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下os.path.isfile仅识别部分CSV文件的技术问题咨询

问题原因拆解

嘿,这个问题其实是个典型的路径处理误区!核心问题出在os.listdir()和os.path.isfile()的配合上:

  • os.listdir(search_dir)返回的只是目标目录里的纯文件名,比如CsvFile1.csv,不带任何路径前缀。
  • 当你用filter(os.path.isfile, files1)的时候,Python会默认在当前脚本所在的工作目录下去找这些文件名,而不是你指定的C:/Temp/CSV目录。

这就解释了为什么脚本在C:/Temp/CSV下时一切正常——此时工作目录就是目标文件夹,os.path.isfile能精准找到文件;但把脚本移去其他文件夹后,工作目录变了,os.path.isfile会去脚本所在目录找CsvFile2.csv这些文件,自然找不到,所以被过滤掉。而你输出里的desktop.ini和CsvFile1.csv能被识别,大概率是这两个文件刚好也存在于脚本当前的工作目录里。

解决方法

有几种简单的修复方式,选你顺手的来:

方法1:拼接完整路径(最稳妥)

把search_dir和每个文件名拼成完整路径,这样os.path.isfile就能准确找到目标文件了:

import os
search_dir = 'C:/Temp/CSV'
# 用os.path.join把目录和文件名拼接成完整路径
files1 = [os.path.join(search_dir, filename) for filename in os.listdir(search_dir)]
files2 = filter(os.path.isfile, files1)
print(files1, '\n')
for f in files2:
    # 要是只想打印文件名,用os.path.basename(f)就行
    print(os.path.basename(f))

方法2:临时切换工作目录

先把当前工作目录切到C:/Temp/CSV,处理完再切回去,这样os.path.isfile就能直接识别文件名:

import os
search_dir = 'C:/Temp/CSV'
# 先保存原工作目录,避免影响后续代码
original_work_dir = os.getcwd()
os.chdir(search_dir)

files1 = os.listdir()
files2 = filter(os.path.isfile, files1)
print(files1, '\n')
for f in files2:
    print(f)

# 切回原来的工作目录
os.chdir(original_work_dir)

方法3:用pathlib(现代Python推荐)

Python 3.4+的pathlib模块让路径处理更直观,不用再纠结字符串拼接:

from pathlib import Path

search_dir = Path('C:/Temp/CSV')
# 直接遍历目录,筛选出文件
all_items = [item.name for item in search_dir.iterdir()]
files2 = [item.name for item in search_dir.iterdir() if item.is_file()]

print(all_items, '\n')
for f in files2:
    print(f)

不管用哪种方法,都能保证脚本放在任何目录下,都能正确识别C:/Temp/CSV里的所有.csv文件。

内容的提问来源于stack exchange,提问作者tomatoeshift

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:54:06