Python - 不使用绝对路径的 Glob

8

我使用glob来获取大量图像的图片对名称。唯一的问题是,我得到的是绝对路径,而我不需要它,我只需要图片的名称。我该怎么做?

import glob

A=sorted(glob.glob('/media/test/A*.png'))
B=sorted(glob.glob('/media/test/B*.png'))
NumbSeq=len(A)
for i in range(0,NumbSeq):
  print "\"%s\",\"%s\","%(A[i],B[i])

我明白:

 "/media/test/A170900_85495.460376.png","/media/test/B170900_85495.460376.png"

我需要这样做:

 "A170900_85495.460376.png","B170900_85495.460376.png"
3个回答

17

使用glob1(dirname, pattern)方法获取文件名,而不是glob(pathname)

>>> glob.glob1("some_dir", "*.png")
['foo.png', 'bar.png', ...]

>>> glob.glob("some_dir/*.png")
['/home/michael/A_dir/B_dir/some_dir/foo.png',
'/home/michael/A_dir/B_dir/some_dir/bar.png',
...]

我很惊讶地发现glob模块有未记录的函数。glob0glob1在字面目录内进行非递归全局搜索。glob0仅接受一个字面基本名称,但是glob1接受一个模式。 - cowlinator
有没有理由更喜欢glob1而不是glob?它更快还是其他什么原因? - Lou
1
@Lou 可能速度差异不大,但希望从我的示例中清楚地看到区别。使用 glob1 可以获取目录中的文件,而 glob 可以获取整个绝对路径。它们具有不同的用途。 - Michael Currin

2

试试这个

os.path.basename(A[i])

这将仅返回文件名。
import glob
import os

A=sorted(glob.glob('/media/test/A*.png'))
B=sorted(glob.glob('/media/test/B*.png'))
NumbSeq=len(A)

for i in range(0,NumbSeq):
  print '"%s","%s"'%(os.path.basename(A[i]),os.path.basename(B[i]))

这将为您提供:
"A170900_85495.460376.png","B170900_85495.460376.png"

谢谢你的帮助!;) 但是我获取到的是 ' "A170900_85495.460376.png","B170900_85495.460376.png" ' 而不是 "A170900_85495.460376.png","B170900_85495.460376.png" ,你知道如何抑制它吗? - user3601754
1
@user3601754 将print语句更改为print str(os.path.basename(A[i])) +"," + str(os.path.basename(B[i])) - user1846747

1

在打印它们之前,将AB中的每个名称传递给os.path.basename:

for i in range(0,NumbSeq):
    print '"%s","%s"'%(os.path.basename(A[i]),os.path.basename(B[i]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接