gpt4 book ai didi

python - 使用 os.popen 在 python 中创建列表

转载 作者:行者123 更新时间:2023-12-01 04:23:56 25 4
gpt4 key购买 nike

以前,我已经能够使用类似于以下的命令创建列表:
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')

关于python - 使用 os.popen 在 python 中创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59621752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com