Glob 没有 return 指定目录中的文件列表
Glob doesn't return list of files from specified directory
我在 Stack Overflow 上的其他帖子中找到了两种从指定目录列出文件的方法,但我似乎无法让它们工作。第一个 return 是路径,第二个 return 是我要查找的文件,也是路径。我已经尝试了几种方法,比如重命名目标目录和文件,但似乎并没有成功。
有问题的代码:
import glob
jpgFilenamesList = glob.glob(r"C:\Users\viodo\PycharmProjects\pythonProject")
print(jpgFilenamesList)
mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"
file_list = glob.glob(mydir + "/*.jpg")
print(file_list)
我得到的:
['C:\Users\viodo\PycharmProjects\pythonProject']
['C:\Users\viodo\PycharmProjects\pythonProject\dngjknfjkg.jpg', 'C:\Users\viodo\PycharmProjects\pythonProject\fjkdnfkl.jpg', 'C:\Users\viodo\PycharmProjects\pythonProject\skdklenfkd.jpg']
在另一个线程中找到的解决方案:Python glob multiple filetypes
一些调整得到它 运行 顺利。感谢您的帮助!
Glob returns 相对于根目录的路径名列表。该根目录被假定为您当前的工作目录,除非指定的 glob 模式是绝对路径。总之,因为你的模式是绝对路径模式,所以返回的文件不会是相对的,而是绝对的,包括整个路径。
当不使用绝对路径模式时,在某些情况下,如果文件名在当前工作目录中匹配,您可能只会获得一个文件名。该文件名当然是相对于当前工作目录的。
在 Python 3.10 中,您应该能够通过新的 root_dir
参数在不使用绝对模式的情况下更改假定的根目录,但这目前在 3.9 及以下版本中不可用:https://docs.python.org/3.10/library/glob.html.
在您的情况下,正如其他人在评论中提到的那样,os.path.basename
应该能够只获取文件名,如果那是您所追求的。或者,您可以通过 os.chdir
更改当前工作目录并提供简单 *.jpg
的 glob 模式并仅获取相对于当前工作目录的文件名,这两种方法都是合理的解决方案。
提取基名:
mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"
file_list = [os.path.basename(f) for f in glob.glob(mydir + "/*.jpg")]
或返回相对于任意“当前工作目录”的文件:
os.chdir(r"C:\Users\viodo\PycharmProjects\pythonProject")
file_list = glob.glob("*.jpg")
根据您的要求,一种解决方案可能比另一种更好。
我在 Stack Overflow 上的其他帖子中找到了两种从指定目录列出文件的方法,但我似乎无法让它们工作。第一个 return 是路径,第二个 return 是我要查找的文件,也是路径。我已经尝试了几种方法,比如重命名目标目录和文件,但似乎并没有成功。
有问题的代码:
import glob
jpgFilenamesList = glob.glob(r"C:\Users\viodo\PycharmProjects\pythonProject")
print(jpgFilenamesList)
mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"
file_list = glob.glob(mydir + "/*.jpg")
print(file_list)
我得到的:
['C:\Users\viodo\PycharmProjects\pythonProject']
['C:\Users\viodo\PycharmProjects\pythonProject\dngjknfjkg.jpg', 'C:\Users\viodo\PycharmProjects\pythonProject\fjkdnfkl.jpg', 'C:\Users\viodo\PycharmProjects\pythonProject\skdklenfkd.jpg']
在另一个线程中找到的解决方案:Python glob multiple filetypes
一些调整得到它 运行 顺利。感谢您的帮助!
Glob returns 相对于根目录的路径名列表。该根目录被假定为您当前的工作目录,除非指定的 glob 模式是绝对路径。总之,因为你的模式是绝对路径模式,所以返回的文件不会是相对的,而是绝对的,包括整个路径。
当不使用绝对路径模式时,在某些情况下,如果文件名在当前工作目录中匹配,您可能只会获得一个文件名。该文件名当然是相对于当前工作目录的。
在 Python 3.10 中,您应该能够通过新的 root_dir
参数在不使用绝对模式的情况下更改假定的根目录,但这目前在 3.9 及以下版本中不可用:https://docs.python.org/3.10/library/glob.html.
在您的情况下,正如其他人在评论中提到的那样,os.path.basename
应该能够只获取文件名,如果那是您所追求的。或者,您可以通过 os.chdir
更改当前工作目录并提供简单 *.jpg
的 glob 模式并仅获取相对于当前工作目录的文件名,这两种方法都是合理的解决方案。
提取基名:
mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"
file_list = [os.path.basename(f) for f in glob.glob(mydir + "/*.jpg")]
或返回相对于任意“当前工作目录”的文件:
os.chdir(r"C:\Users\viodo\PycharmProjects\pythonProject")
file_list = glob.glob("*.jpg")
根据您的要求,一种解决方案可能比另一种更好。