簡體   English   中英

如何在具有不同名稱的文件夾中加載 all.txt 文件 - Python

[英]How to load all .txt files in a folder with separate names - Python


我必須通過從文件夾中導入所有 the.txt 文件來創建一堆 numpy arrays。 這就是我現在正在做的方式:

wil_davide_noIA_IST_nz300           = np.genfromtxt("%s/davide/wil_davide_noIA_IST_nz300.txt" %path)
wig_davide_multiBinBias_IST_nz300   = np.genfromtxt("%s/davide/wig_davide_multiBinBias_IST_nz300.txt" %path)
wig_davide_multiBinBias_PySSC_nz300 = np.genfromtxt("%s/davide/wig_davide_multiBinBias_PySSC_nz300.txt" %path)
wig_davide_noBias_PySSC_nz300       = np.genfromtxt("%s/davide/wig_davide_noBias_PySSC_nz300.txt" %path)
wig_davide_IST_nz300                = np.genfromtxt("%s/davide/wig_davide_IST_nz300.txt" %path)
wig_davide_noBias_IST_nz300         = np.genfromtxt("%s/davide/wig_davide_noBias_IST_nz300.txt" %path)
wig_davide_PySSC_nz300              = np.genfromtxt("%s/davide/wig_davide_PySSC_nz300.txt" %path)
...

從文件夾

在此處輸入圖像描述

我可以以某種方式自動化這個過程嗎? 請注意,我希望數組與導入的文件具有相同的名稱(當然,沒有 .txt)。
非常感謝

這是獲取所有文件名的方法。

path是您的文件路徑(如果在同一目錄中,則為"./"

import os

path = "./"

filenames = []
for filename in os.listdir(path):
  filenames.append[file]

...

此外,您可以使用提供的 if 結構過濾一些文件。 這里我只選擇 txt 文件。

filter是您可以應用的一些過濾器(使用"." not in file中獲取目錄)

import os

path = "./"
filter = ".txt"

txt_filenames = []
for filename in os.listdir(path):
  if filter in file:
    txt_filenames.append[filename]

...

注意:如果文件或其名稱存在任何安全問題,您不應該這樣做。

否則,您可以使用exec function 來獲取您想要的變量。 有關列表方法,請參閱其他解決方案。

import os
path_to_folder = "."
command = ""
for f in os.listdir(path_to_folder):
    if f.endswith(".txt"):
        command += f.replace(".txt", "") + f" = np.genfromtxt('{path_to_folder}/{f}')\n"
exec(command)

根據您的文件夾/文件結構,您需要稍微更改代碼,但這應該像要求的那樣工作。

我沒有對此進行測試,但我認為這個偽代碼應該可以工作 - 關於它的唯一“偽”是硬編碼的"dir/to/files"字符串,您必須將其更改為目錄的路徑包含文本文件。 在現代 Python 中,您將使用pathlibglob標准庫模塊來遍歷給定目錄中的所有文本文件。 創建可變數量的變量,並在運行時確定變量名稱絕不是一個好主意。 相反,請將您的 numpy arrays 保存在某種集合中。 在這種情況下,我建議使用字典,以便您可以通過鍵訪問單個 numpy arrays ,其中鍵是相應文件的名稱作為字符串 - 當然沒有擴展名:

def get_kv_pairs():
    from pathlib import Path
    for path in Path("dir/to/files").glob("*.txt"):
        yield path.stem, np.genfromtxt(str(path))
        

arrays = dict(get_kv_pairs())

print(arrays["wil_davide_noIA_IST_nz300"]) # Here's how you would access the individual numpy arrays.

暫無
暫無

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

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