以前,我已经能够使用类似于以下命令来创建列表:
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
问题似乎与for循环的语法有关:即使该语法在bash中有效,但Python似乎并不喜欢它。甚至没有subprocess.Popen(..., shell=True)
。
因此,请改用seq:
os.popen("for num in $(seq 0 89); do printf "Name_%04dJ.fits\n" $num >> skylist_J_1; done");
将生成具有以下内容的文件skylist_J_1
:
Name_0001J.fits
Name_0002J.fits
Name_0003J.fits
Name_0004J.fits
...
Name_0086J.fits
Name_0087J.fits
Name_0088J.fits
Name_0089J.fits
还请注意,您可以将文件重定向放在外面,这与您的第一个示例更相似(使用>
代替>>
:]]]
os.popen('for num in $(seq 0 89); do printf "Name_%04dJ.fits\n" $num; done > skylist_J_1')