通过for循环附加到空列表,但我的列表输出为空

2024-10-01 17:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数,它的目的是打开、读取、访问指定目录中每个文件中的数据值,并迭代地将每个文件的数据项追加到空列表中,然后这些列表将用于构造一个csv摘要文件。在

问题是在for循环结束时,我的列表是空的。 我该如何解决这个问题?在

我试着翻阅现有的问题,但没发现有用。在

我的代码是:

fileid   = [] * len(os.listdir(path))   
objname  = [] * len(os.listdir(path))
obsvtype = [] * len(os.listdir(path))
filtr    = [] * len(os.listdir(path))



# Open, read, and iterate over files ending with the .fits extension in inputted path.
# Assign fits header key data to a variable and then append iteratively to respective empty list.

for fitsfile in os.listdir(path):
    if fitsfile[-5:] == '.fits':
        try:
            hdulist     = fits.open(str.format(fitsfile))

            filename    = hdulist[0].data['FILENAME']
            fileid.append(filename)


            object_name = hdulist[0].data['OBJECT']
            objname.append(object_name)

            obsvtyp     = hdulist[0].data['OBSTYPE']
            obsvtype.append(obsvtyp)

            filt        = hdulist[0].data['FILTERS']
            filtr.append(filt)
        except:
            pass

print(fileid,objname,obsvtype,filtr)


# Create an empty pandas dataframe object (data table) and assign populated data lists to dataframe.
# columns.

dataframe = pd.DataFrame(data = None)
dataframe['Filename']         = fileid     
dataframe['Object_Name']      = objname    
dataframe['Observation_type'] = obsvtype   
dataframe['Filter']           = filtr      

print(dataframe)

# Export compiled dataframe object to a .csv file in specified directory path.

dataframe.to_csv(path + 'reduc_tbl_result.csv',columns = ['Filename','Object_name',
    'Observation_Type','Filter'],index = None)

结果是:

([],[],[],[]) 空数据帧 列:[文件名,对象名,观察类型,过滤器] 索引:[])

提前谢谢。在


Tags: csvtopathdataframedatalenoslistdir
3条回答

为了回答您最初的问题,您需要初始化您的列表。追加失败,但try块捕捉到错误。在

fileid = []

如果有很多文件,那么追加不是很有效,因为每次追加都必须完整地复制数组。最好提前初始化列表。在

^{pr2}$

您可能还想看看如何使用glob模块列出目录中具有给定扩展名的所有文件,请参见here获取示例。在

从那时起,我就认识到了我的问题的根源,因为他们将来需要一个解决方案。上面的代码打印空列表,因为fits.open()调用没有在操作系统列表目录(路径)通过以下代码:

    for fitsfile in os.listdir(path):
        if fitsfile[-5:] == '.fits':
           try:
               hdulist     = fits.open(str.format(fitsfile))  

我试了一下,结果就不同了:

^{pr2}$

以下基本代码可用于将文件追加到列表:

import os
file_list = []
for f in os.listdir(os.getcwd()):
    file_list.append(f)
print(file_list)

对于您的代码,您希望使用提供的路径,而不是当前的工作目录。在

尝试一些更简单的方法(例如,不处理fits文件),看看它是否有效并增加复杂性。您的错误可能不在添加列表中,而是在使用fits或pandas数据帧时。在

相关问题 更多 >

    热门问题