看板 Python 關於我們 聯絡資訊
剛用PYTHON不久 > < 問題可能比較基礎 但是搞了我一下午 不知道錯在哪 Q_Q 我想要讀取某特定資料夾下的一串檔案 想要取得的檔案 副檔名特定是 .dcm 整個檔案位置結構是 c > mywork(資料夾) > sample(資料夾) > 有A~Z各資料夾 > 各資料夾有要的檔案 我把網路上寫好的函式COPY來 all_files = [] def load_scan(path): for dirName, subdirList, fileList in os.walk(path): for filename in fileList: if ".dcm" in filename.lower(): all_files.append(os.path.join(dirName,filename)) return all_files 這樣的確可以正常運作 輸入 INPUT_FOLDER = 'C:\mywork\SAMPLE' load_scan(INPUT_FOLDER) 可是得到的檔案是 A~Z每一個資料夾裡面 所有.dcm檔案都被取出來成為一個LIST 我只要用可以讀.dcm檔案的函式去比如 read_dcm(all_files[0]) 就可以順利操作檔案了 到這邊運作正常~ 不過我想要改成說 只取得 SAMPLE裡面的比如 A資料夾, B資料夾的檔案內容 依樣畫葫蘆去改它就錯誤了 比如路徑改為 A_FOLDER = 'C:\mywork\SAMPLE\A_dir' 用 load_scan(A_FOLDER) 會跑出 scandir: embedded null character in path 的錯誤 想問問該怎麼樣才能順利取得某資料夾裡的特定檔案成為LIST呢~~ 實在想不到~~ 希望大大指教 > < -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.54.198 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1504954125.A.BE4.html
ckc1ark: A_FOLDER = r'C:\mywork\SAMPLE\A_dir' 09/09 19:04
djshen: os.sep 09/09 19:28
doasgloria: 一樓大大的方法有點厲害 好像通了 怎麼有這種+個r就搞 09/09 19:50
doasgloria: 定的方法 09/09 19:50
ckc1ark: 加r可以讓\不會被當成\n \t這種特殊字元 09/09 20:54
doasgloria: 感謝C大 這樣我可以理解為什麼會通 等於指定了一個資 09/09 21:01
doasgloria: 料夾路徑讓它去讀取吧~ 那為什麼原本的 沒有+r 也會正 09/09 21:02
doasgloria: 常運作沒出錯啊@@ 09/09 21:02
doasgloria: 如果太麻煩不用解說沒關係XD 反正現在問題解決了 哈哈 09/09 21:06
ckc1ark: 只有\a會合在一起被當成一個byte吧 其他的不會這樣 09/09 21:30
cutekid: 推 c 大的解譯喔。https://goo.gl/4cGoLN 有詳解喔 ^_^ 09/09 22:48
uranusjr: 不只 \a, \0 到 \9 和 \a 到 \f 都會; 比較建議的寫法是 09/11 13:50
uranusjr: 一樓那樣, 或者 os.sep.join(['C:', 'mywork', ...]) 09/11 13:51
uranusjr: 或如果你用 Python 3, 可以改用 pathlib (支援 / 分隔) 09/11 13:52
ckc1ark: 我的意思是他的例子\m和\S剛好沒被解讀成特殊字元 09/11 20:31
ckc1ark: 另外r'..' 不適用於\結尾的字串 這倒是缺點 09/11 20:34
ckc1ark: ref: https://stackoverflow.com/a/19654184 09/11 20:34
cutekid: 推 ck 大 09/12 14:25
coeric: 我自己是都養成習慣 把\ 改成/ 才不會出事 09/13 11:24