Python 如何使用glob仅捕获目录中的特定文件类型

Python 如何使用glob仅捕获目录中的特定文件类型,python,glob,python-os,Python,Glob,Python Os,我试图使用python的“glob”来使用通配符而不是文件的路径来获取各种文件 在这种情况下,我试图捕获目录中以名称file\uu开头的所有文件。尽管将来可能会出现这样的情况,我需要根据文件扩展名(即所有.csv和.log)从目录中获取文件 下面的python字符串是我正在使用的,它只能获取完整路径以及所需文件。我只想“全局”文件本身,而不是路径 import os import glob import boto3 from botocore.client import Config ACCE

我试图使用python的“glob”来使用通配符而不是文件的路径来获取各种文件

在这种情况下,我试图捕获目录中以名称
file\uu
开头的所有文件。尽管将来可能会出现这样的情况,我需要根据文件扩展名
(即所有.csv和.log)
从目录中获取文件

下面的python字符串是我正在使用的,它只能获取完整路径以及所需文件。我只想“全局”文件本身,而不是路径

import os
import glob
import boto3
from botocore.client import Config

ACCESS_KEY_ID = 'some_key'
ACCESS_SECRET_KEY = 'some_key'
BUCKET_NAME = 'some_bucket'


s3 = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_SECRET_KEY,
    config=Config(signature_version='s3v4')
)

csv_files = glob.glob('/home/user/folder1/folder2/*.csv')
#json_files = glob.glob("/home/user/folder1/h_log_*.json")

for filename in csv_files:
     print("Putting %s" % filename)
     s3.upload_file(filename, BUCKET_NAME, 'new_folder' + '/' + filename)

#for filename in json_files:
#    print("Putting %s" % filename)
#    s3.upload_file(filename, BUCKET_NAME, filename)

print("All_Finished")

####################################################
####################################################

The string I am trying to concentrate on updating from the script preferably is below:

csv_files = glob.glob('/home/user/folder1/folder2/*.csv')


An example of a file directory containing various files and file types :

Below need to grab all files that end in `.csv`
/home/user/Desktop/folder_example/
file_1.csv
file_1.csv
file_1.csv
file_1.csv

Below need to grab all files that start with `file_`
/home/user/Desktop/folder_example/
file_2.log
file_2.csv
file_2.log
file_2.csv

如何使用
os.path.basename

您可以将
glob
与此功能结合使用,以获得您想要的:


[glob.glob中项目的os.path.basename(项目)(“/home/user/folder1/folder2/*.csv”)]

如何使用
os.path.basename

您可以将
glob
与此功能结合使用,以获得您想要的:


[glob.glob中项目的os.path.basename(项目)(“/home/user/folder1/folder2/*.csv”)]

您可以基于分隔符
'/'
'\'
拆分
glob
输出,然后保留最后一部分

导入操作系统
target_path=r“/home/user/folder1/folder2”
fpaths=glob.glob(目标路径+os.sep+'*.csv')
[fp.split(os.sep)[-1]用于fpaths中的fp]
完整示例 制作演示文件夹和演示文件 输出

['file_0.csv', 'file_0.log', 'file_0.txt', 
'file_1.csv', 'file_1.log', 'file_1.txt', 
'file_2.csv', 'file_2.log', 'file_2.txt', 
'file_3.csv', 'file_3.log', 'file_3.txt', 
'file_4.csv', 'file_4.log', 'file_4.txt']
获取
.csv
文件的文件名(没有路径,只有名称)
fpaths=glob.glob(目标路径+os.sep+'*.csv')
[fp.split(os.sep)[-1]用于fpaths中的fp]
输出

['file_0.csv', 'file_3.csv', 'file_2.csv', 'file_1.csv', 'file_4.csv']

您可以根据分隔符
'/'
'\'
拆分
全局
输出,然后保留最后一部分

导入操作系统
target_path=r“/home/user/folder1/folder2”
fpaths=glob.glob(目标路径+os.sep+'*.csv')
[fp.split(os.sep)[-1]用于fpaths中的fp]
完整示例 制作演示文件夹和演示文件 输出

['file_0.csv', 'file_0.log', 'file_0.txt', 
'file_1.csv', 'file_1.log', 'file_1.txt', 
'file_2.csv', 'file_2.log', 'file_2.txt', 
'file_3.csv', 'file_3.log', 'file_3.txt', 
'file_4.csv', 'file_4.log', 'file_4.txt']
获取
.csv
文件的文件名(没有路径,只有名称)
fpaths=glob.glob(目标路径+os.sep+'*.csv')
[fp.split(os.sep)[-1]用于fpaths中的fp]
输出

['file_0.csv', 'file_3.csv', 'file_2.csv', 'file_1.csv', 'file_4.csv']

由于文件夹中只有两种类型的文件,因此可以分别读取不同类型的文件

csv_files = glob.glob( os.path.join('/home/user/Desktop/folder_example/', '*.csv') )
log_files = glob.glob( os.path.join('/home/user/Desktop/folder_example/', '*.log') )

由于文件夹中只有两种类型的文件,因此可以分别读取不同类型的文件

csv_files = glob.glob( os.path.join('/home/user/Desktop/folder_example/', '*.csv') )
log_files = glob.glob( os.path.join('/home/user/Desktop/folder_example/', '*.log') )
您可以使用Python>=3.5的库
Path.glob()
返回一个生成器,您可以通过它进行迭代

from pathlib import Path

path_generator = Path('/home/user/folder1/folder2').glob('*.csv')
[p.name for p in path_generator]
输出:

['file_0.csv', 
 'file_1.csv', 
 'file_2.csv', 
 'file_3.csv', 
 'file_4.csv']
您可以使用Python>=3.5的库
Path.glob()
返回一个生成器,您可以通过它进行迭代

from pathlib import Path

path_generator = Path('/home/user/folder1/folder2').glob('*.csv')
[p.name for p in path_generator]
输出:

['file_0.csv', 
 'file_1.csv', 
 'file_2.csv', 
 'file_3.csv', 
 'file_4.csv']

嘿,让我更新顶部的代码作为编辑,以显示整个脚本,以捕获我试图完成的全部A>Z。我尝试了你建议的代码,但仍然有问题。我也尝试了这个字符串,但仍然遇到问题
csv_files=glob.glob(os.path.basename('/home/user/Desktop/*.csv'))
@ExplodingGayFishI刚刚更新了上面的主代码,对新的编辑有什么想法吗@使用
csv\u files=glob.glob(os.path.basename('/home/user/Desktop/*.csv'))
也是错误的,因为它只是
csv\u files=glob.glob('*.csv')
我想我看到了你的问题。在行
s3.upload_file(文件名,BUCKET_NAME,'new_folder'+'/'+文件名)
中,您需要分隔2
filename
变量。第一个是文件在计算机中的本地路径,第二个只是基本名称。试试这个,看看它是否管用:嘿,我刚试过你从pastebin得到的建议,但仍然不管用:(.尽管如此,它不会抛出错误。此外,它完成并在
All_Finished
结尾显示我的最终打印语句,但不会将任何文件发送到我的s3存储桶。有什么想法吗?@ExplodingGayFishHey,让我更新顶部的代码,作为编辑,以显示整个脚本,以捕获我试图完成的全部内容。我我修改了你建议的代码,但仍然有问题。我也尝试了这个字符串,仍然遇到问题
csv\u files=glob.glob(os.path.basename('/home/user/Desktop/*.csv'))
@explodingGayfish刚刚更新了上面的主代码,对新的编辑有什么想法吗?@explodingGayfish也使用
csv\u files=glob.glob(os.path.basename('/home/user/Desktop/*.csv'))
是错误的,因为它只是
csv\u files=glob.glob('*.csv'))
我想我看到了你的问题。在第
s3行中,上传文件(文件名,BUCKET\u名称,'新文件夹'+'/'+文件名)
您需要分离2
filename
变量。第一个变量是您计算机中文件的本地路径,第二个仅是基本名称。试试看是否有效:嘿,我刚从pastebin尝试了您的建议,但仍然无效:(.不过,它不会抛出错误。此外,它完成并在
All_Finished
结尾显示我的最终打印语句,但不会将任何文件发送到我的s3存储桶。有什么想法吗?@ExplodingGayFish