2022年 11月 3日

python读取文件名及后缀

因为某些原因,需要读取d.lib后缀的文件,在此写下记录

 

os.listdir()

语法:os.listdir(path)

函数用途:输出路径下所有文件的文件名

实验代码:

假如我们需要读取该文件夹所包含全部文件名

  1. import os
  2. path = "E:/vs_code/qtVideo/lib"
  3. datanames = os.listdir(path)
  4. for i in datanames:
  5. print(i)

输出:

  1. A_TEST
  2. OpenCVConfig-version.cmake
  3. OpenCVConfig.cmake
  4. OpenCVModules-debug.cmake
  5. OpenCVModules-release.cmake
  6. OpenCVModules.cmake
  7. opencv_aruco330.lib
  8. opencv_aruco330d.lib
  9. opencv_bgsegm330.lib
  10. opencv_bgsegm330d.lib
  11. opencv_bioinspired330.lib
  12. opencv_bioinspired330d.lib
  13. opencv_calib3d330.lib
  14. opencv_calib3d330d.lib
  15. opencv_ccalib330.lib
  16. opencv_ccalib330d.lib
  17. opencv_core330.lib
  18. opencv_core330d.lib
  19. opencv_datasets330.lib
  20. opencv_datasets330d.lib
  21. opencv_dnn330.lib
  22. opencv_dnn330d.lib
  23. opencv_dpm330.lib
  24. opencv_dpm330d.lib
  25. opencv_face330.lib
  26. opencv_face330d.lib
  27. opencv_features2d330.lib
  28. opencv_features2d330d.lib
  29. opencv_flann330.lib
  30. opencv_flann330d.lib
  31. opencv_fuzzy330.lib
  32. opencv_fuzzy330d.lib
  33. opencv_highgui330.lib
  34. opencv_highgui330d.lib
  35. opencv_imgcodecs330.lib
  36. opencv_imgcodecs330d.lib
  37. opencv_imgproc330.lib
  38. opencv_imgproc330d.lib
  39. opencv_img_hash330.lib
  40. opencv_img_hash330d.lib
  41. opencv_line_descriptor330.lib
  42. opencv_line_descriptor330d.lib
  43. opencv_ml330.lib
  44. opencv_ml330d.lib
  45. opencv_objdetect330.lib
  46. opencv_objdetect330d.lib
  47. opencv_optflow330.lib
  48. opencv_optflow330d.lib
  49. opencv_phase_unwrapping330.lib
  50. opencv_phase_unwrapping330d.lib
  51. opencv_photo330.lib
  52. opencv_photo330d.lib
  53. opencv_plot330.lib
  54. opencv_plot330d.lib
  55. opencv_reg330.lib
  56. opencv_reg330d.lib
  57. opencv_rgbd330.lib
  58. opencv_rgbd330d.lib
  59. opencv_saliency330.lib
  60. opencv_saliency330d.lib
  61. opencv_shape330.lib
  62. opencv_shape330d.lib
  63. opencv_stereo330.lib
  64. opencv_stereo330d.lib
  65. opencv_stitching330.lib
  66. opencv_stitching330d.lib
  67. opencv_structured_light330.lib
  68. opencv_structured_light330d.lib
  69. opencv_superres330.lib
  70. opencv_superres330d.lib
  71. opencv_surface_matching330.lib
  72. opencv_surface_matching330d.lib
  73. opencv_text330.lib
  74. opencv_text330d.lib
  75. opencv_tracking330.lib
  76. opencv_tracking330d.lib
  77. opencv_video330.lib
  78. opencv_video330d.lib
  79. opencv_videoio330.lib
  80. opencv_videoio330d.lib
  81. opencv_videostab330.lib
  82. opencv_videostab330d.lib
  83. opencv_xfeatures2d330.lib
  84. opencv_xfeatures2d330d.lib
  85. opencv_ximgproc330.lib
  86. opencv_ximgproc330d.lib
  87. opencv_xobjdetect330.lib
  88. opencv_xobjdetect330d.lib
  89. opencv_xphoto330.lib
  90. opencv_xphoto330d.lib

结果分析:

os.listdir  以列表的形式返回指定文件夹的下所有内容,不管是文件还是文件夹

 

os.path.splitext()

语法:os.path.splitext(文件名)

函数用途:将文件名和扩展名分开。

实验代码:

  1. name1 = "opencv_xphoto330d.lib"
  2. name2 = "D:\\opencv_xphoto330d.lib"
  3. result1 = os.path.splitext(name1)
  4. result2 = os.path.splitext(name2)
  5. print("result1:",result1)
  6. print("result2:",result2)
  7. print("type:",type(result1),type(result2))

输出:

  1. result1: ('opencv_xphoto330d', '.lib')
  2. result2: ('D:\\opencv_xphoto330d', '.lib')
  3. type: <class 'tuple'> <class 'tuple'>

结果分析:

就是以文件名中的’.’作为分隔符,分隔文件名称与文件后缀,以元组的形式返回文件名与后缀。

 

os.path.split()

语法:os.path.split(path)

函数用途:返回文件的路径和文件名。

实验代码:

  1. name1 = "opencv_xphoto330d.lib"
  2. name2 = "E:\\vs_code\\qtVideo\\opencv_xphoto330d.lib"
  3. name3 = "E:\\vs_code\\qtVideo"
  4. result1 = os.path.split(name1)
  5. result2 = os.path.split(name2)
  6. result3 = os.path.split(name3)
  7. print("result1:",result1)
  8. print("result2:",result2)
  9. print("result3:",result3)
  10. print("type:",type(result1),type(result2),type(result3))

输出:

  1. result1: ('', 'opencv_xphoto330d.lib')
  2. result2: ('E:\\vs_code\\qtVideo', 'opencv_xphoto330d.lib')
  3. result3: ('E:\\vs_code', 'qtVideo')
  4. type: <class 'tuple'> <class 'tuple'>

结果分析:

就是以路径最后一个’/’或者’\\’为分隔,以元祖的形式返回路径与文件名,若只有文件名,则输出文件名与空。

 

案例分析:

指定文件夹下包含.lib、d.lib、其他文件夹,需要获得文件夹中所有d.lib后缀的文件名

思路:

通过listdir()获得该文件夹下所有文件名,使用splitext()分离文件名和后缀,判断文件名最后一个是否为d,后缀是否为lib

代码实验:

  1. import os
  2. path = "E:/vs_code/qtVideo/lib"
  3. datanames = os.listdir(path)
  4. for i in datanames:
  5. if os.path.splitext(i)[1]=='.lib' and os.path.splitext(i)[0][-1]=='d':
  6. print(i)

输出:

  1. opencv_aruco330d.lib
  2. opencv_bgsegm330d.lib
  3. opencv_bioinspired330d.lib
  4. opencv_calib3d330d.lib
  5. opencv_ccalib330d.lib
  6. opencv_core330d.lib
  7. opencv_datasets330d.lib
  8. opencv_dnn330d.lib
  9. opencv_dpm330d.lib
  10. opencv_face330d.lib
  11. opencv_features2d330d.lib
  12. opencv_flann330d.lib
  13. opencv_fuzzy330d.lib
  14. opencv_highgui330d.lib
  15. opencv_imgcodecs330d.lib
  16. opencv_imgproc330d.lib
  17. opencv_img_hash330d.lib
  18. opencv_line_descriptor330d.lib
  19. opencv_ml330d.lib
  20. opencv_objdetect330d.lib
  21. opencv_optflow330d.lib
  22. opencv_phase_unwrapping330d.lib
  23. opencv_photo330d.lib
  24. opencv_plot330d.lib
  25. opencv_reg330d.lib
  26. opencv_rgbd330d.lib
  27. opencv_saliency330d.lib
  28. opencv_shape330d.lib
  29. opencv_stereo330d.lib
  30. opencv_stitching330d.lib
  31. opencv_structured_light330d.lib
  32. opencv_superres330d.lib
  33. opencv_surface_matching330d.lib
  34. opencv_text330d.lib
  35. opencv_tracking330d.lib
  36. opencv_video330d.lib
  37. opencv_videoio330d.lib
  38. opencv_videostab330d.lib
  39. opencv_xfeatures2d330d.lib
  40. opencv_ximgproc330d.lib
  41. opencv_xobjdetect330d.lib
  42. opencv_xphoto330d.lib

可以看到我们把文件中的d.lib的文件都已经筛选出来了