一種批量讀取檔案的方法 CSV檔案

2021-06-23 05:49:55 字數 1307 閱讀 9790

在c語言程式設計中經常遇到乙個問題:如何批量讀取乙個目錄下某一型別的所有檔案,例如影象檔案。最近在研究影象模式分類問題,經常需要對某一種分類器進行訓練,在訓練過程中需要遍歷某一資料夾下的幾百甚至幾千張樣本,如何用程式完成這個遍歷工作,實在是乙個問題,在此對其中的一種解決辦法——csv檔案讀取方法,進行詳細介紹。

所謂csv檔案,就是一種純文字檔案,即記事本檔案,這種檔案可以通過dos命令生成。通過csv檔案批量讀取資料的思路如下:首先通過dos命令生成乙個txt檔案,這個檔案內容很多行,其中每行均是乙個目標檔案在計算機中的全路徑名。然後在程式中分別讀取每行中相應的內容,定位檔案,逐個完成讀取。

舉個例子,我有400張,分別存放在e盤下名為orl資料夾下的40個子資料夾中,每個資料夾有十張,副檔名統一為*.bmp格式,如何完成對這400張的讀取?下面結合例項**來具體談一下這個問題。

首先是csv檔案的建立,這需要通過dos命令進行操作。開啟命令提示符視窗後,預設為系統路徑(不同電腦可能不一樣),輸入命令「e:」,回車,進入e盤,然後再輸入「cd/orl」,回車,進入orl資料夾中,然後輸入命令「dir/b/s *.bmp > at.txt」,回車,之後就會發現在orl資料夾中生成了乙個名為「at」的txt檔案,開啟之後發現裡面儲存了該目錄下不同子目錄中所有檔案的路徑,至此csv檔案建立成功。

csv檔案建立好之後就可以在程式中讀取相應的檔案,在這裡寫了乙個簡單的讀取函式與大家分享,**如下:

void read_csv(const string& filename, vector& images)

string path;//string變數,用以儲存讀出的路徑

while (getline(file,path))//從檔案中讀出一行的內容,儲存在變數path中}}

這裡需要說的一點就是getline()函式,如果未加限制條件,則預設從文字檔案的第一行開始讀,遇到「/n」停止,下次讀取時在此位置接著向下讀。不過這個函式是可以人為加條件使其停止讀入字元的,可以在數量上進行限制,如讀入固定個字元後自動停止;或者在字元上進行限制,即讀到某個特定的字元則停止。

最後只需在程式中呼叫read_csv()函式即可,**如下:

int _tmain(int argc, _tchar* argv)

通過呼叫read_csv(file_scv,image)函式,能夠把所有影象檔案讀取到建立的影象容器image中。

最後說明一點,就是這種方法還能夠批量讀取帶標籤的影象樣本,只需在原函式的基礎上做一些小小的改動就行了,這部分內容在我的一篇有關opencv人臉識別的博文中提過

一種好用的檔案格式 csv檔案

在電子技術中,經常涉及到大量的資料處理工作。將採集到的資料匯入 excel 檔案,可以很方便地利用 excel 中封裝的大量公式函式完成進一步的資料計算處理工作。因此在自動化測試技術中,通常將採集到的資料存入 excel xls 檔案中。然而在使用 vc 對excel 檔案進行操作時,涉及到對 co...

一種讀取xml配置的方法

如果對於每個xml檔案都去寫個讀取方法,將會顯得非常冗餘和臃腫,因此可以設計一種更優雅的讀取方法,例如對於有如下格式的xml檔案 可以通過python指令碼轉換為帶有struct結構體型別的c 其中封裝了解析了xml檔案的xmlparser介面,上述test.xml轉換後的c 片段如下所示 其中dy...

C 讀取CSV檔案的方法

在很多系統中,都需要讀取csv檔案,我在以前的乙個專案中也遇到過要將csv檔案中的資料讀取到datatable中進行處理,下面的 getcsvfile s filename and data獲取csv檔案中資料,並將資料匯入datatable中 mycsvdt 用來裝csv檔案中資料的datatab...