PEP? os.listdir增强 [英] PEP ? os.listdir enhancement

查看:95
本文介绍了PEP? os.listdir增强的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我注意到当我使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆