簡體   English   中英

根據文件夾名稱創建數組

[英]Creating arrays based on folder name

我有在多個文件夾中收集和組織的數據。
在每個文件夾中,可以有多個類似的運行——例如,在相同條件下、不同時間收集的數據。 這些文件名中包含一個遞增的數字。 每個文件夾都包含在不同條件下收集的相似數據。 例如,我可以有一個idle folder ,其中可以是名為idle_1.csvidle_2.csvidle_3.csv等的文件。然后我可以有另一個文件夾pos1 folder ,類似地, pos1_1.csvpos1_2.csv , 等等。

為了跟蹤數組中的數據來自哪個文件夾和哪個文件,我想使用文件夾名稱“idle”、“pos1”等作為數組名稱。 然后,該文件夾中的每個文件(或處理該文件夾中每個文件所產生的數據)成為該數組中的另一行。

例如,如果文件夾的名稱存儲在變量 arrname 中,而文件索引存儲在變量 arrndx 中,我想將該值寫入該數組:

arrname[arrndx]=value

這不起作用,出現以下錯誤:

TypeError: 'str' object does not support item assignment

然后,我想使用字典來做到這一點,但我想我仍然會遇到同樣的問題。 如果我使用字典,我想我需要每個字典的名稱都是從文件夾名稱派生的名稱 - 產生相同的問題。 如果我嘗試將其用作字典中的鍵,則條目將被同一文件夾中每個文件的數據覆蓋,因為名稱相同:

    arrays['name']=arrname
    arrays['index']=int(arrndx)
    arrays['val']=value

    arrays['name': arrname, 'index':arrndx, 'val':value]

我也不能使用“索引”,因為它在每個不同的文件夾中都不是唯一的。

所以,我很難過。 我想我可以預定義所有數組,然后根據變量名寫入正確的數組,但這可能會導致一個大的 case 語句(python 中有這樣的東西嗎?)或一個大的 if 語句。 也許在我的情況下無法避免這一點,但我認為必須有一種更優雅的方式......

編輯

我能夠使用 globals() 解決我的問題:

globals()[arrname].insert(int(arrndx),value)

但是,我相信這不是“正確”的解決方案,盡管我不明白為什么不贊成這樣做。

使用第一級文件夾名稱和第二級文件索引(或名稱)的嵌套字典。

from pathlib import Path

data = {}
base_dir = 'base'
for folder in Path(base_dir).resolve().glob('*'):
    if not folder.is_dir():
        continue
    data[folder.name] = {}
    for csv in folder.glob('*.csv'):
        file_id = csv.stem.split('_')[1]
        data[folder.name][file_id] = csv

上面的例子只是將文件名保存在結構中,但您也可以加載文件的數據(例如使用 Pandas)並將其保存到字典中。 這一切都取決於你之后想用它做什么。

關於什么 :

foldername = 'idle'  # Say your folder name is idle for example 
files = {}
files[filename] = [filenmae + "_" + str(i) + ".csv" for i in range(1, number_of_files_inside_folder + 2)]

這能解決你的問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM