使用 pathlib 查找单个 csv 文件的最简单方法
Simplest way to find a single csv file using pathlib
我想使用 pahtlib
读取子文件夹 foo
中唯一的 csv
文件,而无需明确指定名称。这样,如果文件名发生变化,代码仍然有效,但是 foo
中只有一个 csv
文件的前提条件仍然有效。
现在我会
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 我如何修改上面的代码,以便在 foo
中没有 csv
文件的情况下抛出错误?
我会用这样的东西
from glob import glob
try:
csv_file = glob('foo/*.csv')[0]
except IndexError:
raise RuntimeError('No csv file found')
pathlib.Path.glob
是生成 pathlib.Path
对象的生成器,因此您可以对其调用 next
以仅使用生成器中的第一个路径对象。您可以向 next
提供一个可选参数,以防止在不存在 CSV 文件时抛出 StopIteration
异常(在这种情况下,next
returns 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!")
我想使用 pahtlib
读取子文件夹 foo
中唯一的 csv
文件,而无需明确指定名称。这样,如果文件名发生变化,代码仍然有效,但是 foo
中只有一个 csv
文件的前提条件仍然有效。
现在我会
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 我如何修改上面的代码,以便在 foo
中没有 csv
文件的情况下抛出错误?
我会用这样的东西
from glob import glob
try:
csv_file = glob('foo/*.csv')[0]
except IndexError:
raise RuntimeError('No csv file found')
pathlib.Path.glob
是生成 pathlib.Path
对象的生成器,因此您可以对其调用 next
以仅使用生成器中的第一个路径对象。您可以向 next
提供一个可选参数,以防止在不存在 CSV 文件时抛出 StopIteration
异常(在这种情况下,next
returns 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!")