PEP? os.listdir增强 [英] PEP ? os.listdir enhancement
问题描述
我注意到当我使用os.listdir时,我需要使用绝对路径
90%的时间。
虽然我可以使用for循环,但我会优先使用列表理解,
但它变得太长了。
我建议添加一个''abs''关键字会使os.listdir返回
文件的绝对路径而不是相对路径。
我认为这只会带来优势。 br />
我展示了两个例子
来自os import listdir
来自os.path import isdir,join,getsize, isfile
###例如1第1部分 - 获取目录列表###
dirs = []
for os in os.listdir(path):
tmp_path = os.path.join(path,i)
if os.path.isdir(tmp_path):
dirs.append(tmp_path)
###例如1部分2 ###
dirs = [在listdir(路径)中为x加入(路径,x),如果isdir(join(path,x))]
这里列表理解仍然很清楚,但仅仅因为我们有
直接引用加入和朋友。此外,每个目录需要使用两次加入
。
###例如2第1部分 - 获取(文件,大小)元组列表###
path_size = []
for os in os.listdir(path):
tmp_path = os.path.join(path,i)
if os.path.isfile(tmp_path):
path_size.append((tmp_path, getsize(tmp_path))
###例如2部分2 ###
dirs = [(join(path,x),getsize(join(join)如果
isfile(join(path,x))]
现在列表理解太长了,并且在最坏的情况我们必须使用
每次迭代加入3次。
在os.listdir上添加一个''abs''关键字会给两者带来好处
循环和列表推导。
循环将丢失tmp_path赋值和列表推导...
###例如1 part 2 bis ###
dirs = [x for listdir中的x(路径,绝对=真)如果isdir(x)]
这里我们获得清晰度和速度。
###例如2部分2之二###
dirs = [(x,getsize(x))for list in x ir(path,abs = True)if isfile(x)]
在这里我们获得清晰度,速度和真正的_usable_列表理解
您对此有何看法?
感谢您的阅读,
Riccardo
-
Riccardo Galli
Sideralis计划
http:/ /www.sideralis.net
推荐答案
为什么不自己定义这个功能呢?不是每个3行功能都需要内置
。
def listdir_joined(路径):
返回[os。 os.listdir(path)中的条目的path.join(路径,条目)
dirs = [x for listdir_joined(path)中的x,如果是os.path.isdir(x) ]
path_size = [(x,getsize(x))for list in listdir_joined(path)if os.path.isfile(x)]
Jeff
-----开始PGP SIGNATURE -----
版本:GnuPG v1.2.1(GNU / Linux)
iD8DBQFCuZFYJd01MZaTXX0RAqz2AKCozk1iJjrTwFRv4up5Nd eVXQUNUQCeKniG
Q4Sl42Sp6dMnMFL0u607gwI =
= QEy2
----- END PGP SIGNATURE -----
Why not just define the function yourself? Not every 3-line function
needs to be built in.
def listdir_joined(path):
return [os.path.join(path, entry) for entry in os.listdir(path)]
dirs = [x for x in listdir_joined(path) if os.path.isdir(x)]
path_size = [(x, getsize(x)) for x in listdir_joined(path) if os.path.isfile(x)]
Jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQFCuZFYJd01MZaTXX0RAqz2AKCozk1iJjrTwFRv4up5Nd eVXqUNUQCeKniG
Q4Sl42Sp6dMnMFL0u607gwI=
=QEy2
-----END PGP SIGNATURE-----
Riccardo Galli写道:
Riccardo Galli wrote:
我注意到当我使用os.listdir时我需要使用绝对路径
90%的时间。
虽然我可以使用for循环,但我会优先使用列表理解,
但它变得太长了。
### eg 1第1部分 - 在os.listdir(路径)中获取目录列表###
dirs = []
:
tmp_path = os.path.join(path,i)
如果os.path.isdir(tmp_path):
dirs.append(tmp_path)
### eg 1部分2 ###
dirs = [在listdir(路径)中为x连接(路径,x),如果isdir(join(path,x))]
I noticed that when I use os.listdir I need to work with absolute paths
90% of times.
While I can use a for cycle, I''d prefere to use a list comprehension,
but it becomes too long.
### e.g. 1 part 1 - getting a list of directories ###
dirs=[]
for i in os.listdir(path):
tmp_path=os.path.join(path,i)
if os.path.isdir(tmp_path):
dirs.append(tmp_path)
### e.g. 1 part 2 ###
dirs=[join(path,x) for x in listdir(path) if isdir(join(path,x))]
使用Jason Orendorff的路径模块,所有这些代码基本上折叠了
到这个美丽(你的变量路径重命名为myPath到
避免名称冲突):
<来自路径导入路径的
dirs = path(myPath).abspath()。dirs()
-Peter >
Peter Hansen写道:
Peter Hansen wrote:
使用Jason Orendorff的路径模块,所有这些代码基本上崩溃了这个美丽(你的变量路径重命名为myPath以避免名称冲突):
Using Jason Orendorff''s "path" module, all this code basically collapses
down to this beauty (with your variable "path" renamed to myPath to
avoid a name collision):
这必须是我最常使用的非stdlib库。这是一个很棒的模块。
-
Michael Hoffman
This has to be the non-stdlib library I use the most. It''s a great module.
--
Michael Hoffman
这篇关于PEP? os.listdir增强的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!