微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 pathlib 查找单个 csv 文件的最简单方法

如何解决使用 pathlib 查找单个 csv 文件的最简单方法

我想使用 csv 读取子文件foo 中唯一的 pahtlib 文件,而无需明确指定名称。这样,如果文件名改变,代码仍然有效,但前提条件是 csv 中只有一个 foo 文件仍然有效。

现在我愿意

from pathlib import Path

foo_dir = Path.cwd() / 'foo'
for file in foo_dir.glob('*'):
    if file.is_file() & (file.suffix = '.csv'):
        csv_file = file
        break 

这是...呃,它有效,但有点罗嗦。在不牺牲可读性的情况下,有什么我可以做的更简单的事情吗?

PS 如何修改上面的代码,以便在 csv 中没有 foo 文件的情况下,它会引发错误

解决方法

pathlib.Path.glob 是一个生成 pathlib.Path 对象的生成器,因此您可以在其上调用 next 以仅使用生成器中的第一个路径对象。您可以为 next 提供一个可选参数,以防止在不存在 CSV 文件时抛出 StopIteration 异常(在这种情况下,next 返回 None)。>

from pathlib import Path

if (path := next(Path("dir/to/file").glob("*.csv"),None)) is None:
    print("No .csv file present!")
else:
    print(path)

from pathlib import Path

try:
    path = next(Path("dir/to/file").glob("*.csv"))
except StopIteration:
    raise RuntimeError("No .csv file present!")
,

我会使用这样的东西

from glob import glob

try:
    csv_file = glob('foo/*.csv')[0]
except IndexError:
    raise RuntimeError('No csv file found')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。