【发布时间】:2020-01-07 03:19:13
【问题描述】:
以前,我可以使用类似于以下的命令创建列表:
os.popen('ls *.fits > samplelist')
现在我正在尝试通过按数字对文件进行分组来将文件组织成列表。
文件命名如下:
Name_0000_J.fits、Name_0001_J.fits、Name_0002_J.fits 等
我尝试运行这行代码,但它只是创建列表 skylist_J_1 并将其留空。
os.popen('for num in {0000..0089} ; do ls Name_$num\_J.fits >> skylist_J_1 ; done')
我在命令行中运行了上述内容,它运行良好。任何见解将不胜感激。
编辑:
我想出了这个解决方案,但它相当笨重。希望有一种更简洁的方法来实现这一点。
def MkSkylist(qmin,qmax,name,band,quadrant):
a = qmax-qmin+1
ran = np.arange(qmin,qmax+1)
num = [0]*a
i = 0
while i < a:
num[i] = np.array2string(ran[i]).zfill(4)
i = i + 1
os.popen('ls '+name+num[0]+'_'+band+'.fits > skylist_'+band+'_'+quadrant)
i = 1
while i < a:
os.popen('ls '+name+num[0]+'_'+band+'.fits >> skylist_'+band+'_'+quadrant)
i = i + 1
【问题讨论】:
-
为什么不用
os.popen不用Python 编写它。或将其放入文件并运行os.popen("filename") -
您的问题并不是真正的 Python 问题,而更像是
bash问题,因为您没有在 Python 中解决问题。但是,问题可能是由您声明中的反斜杠引起的。不过,您确实应该研究pathlib,例如:docs.python.org/3/library/pathlib.html#pathlib.Path.glob - 主要原因是编写一些不依赖于运行脚本的特定 shell 并且具有跨操作系统工作的脚本的东西。 -
我认为这确实是一个 Python 问题:在 shell 中我们可以编写
for num in {2..4}; do echo $num; done(打印 3 行:2、3和4)。但是使用os.popen或subprocess.Popen会打印一行:{2..4}。所以问题是关于如何在 Python 中实现编写一个 bash-for 循环。