Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:基于名称和日期下载s3文件

Python:基于名称和日期下载s3文件
EN

Stack Overflow用户
提问于 2018-09-05 05:38:08
回答 1查看 2.4K关注 0票数 0

我试图根据文件名的id和日期从s3中提取文件:

命名公约:

命名惯例如下:

** ID_NAME_DATE.csv :文件名遵循相同的模式

示例: 9919USEN_File_20180216.csv

示例: 9919GBEN_File_20180211.csv

**

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import boto3
import re

def downloadFiletest():

#connect to s3
client = boto3.resource(u's3', aws_access_key_id=u'KEY',
                       aws_secret_access_key=u'TOKEN')
                       
#used for downloading                      
s3 = boto3.client(u's3', aws_access_key_id=u'KEY',
                       aws_secret_access_key=u'TOKEN')
dateIdReg = '[0-9]{8}'
dateSuffix = re.compile(date)
print (u"= S3 Client Connected =")
# configure s3 bucket
bucket = client.Bucket(u'us-eu-Bucket')
b_folder = "/folder/example/"
c_folder = b_folder.lower() + '/'
files_not_found = True
for cList in bucket.objects.filter(Prefix=b_folder):
    cFiles= cList.key
    print ('file : ', cFiles)
    for fileId in cFiles.lower():
        files_not_found = False
        f = fileId.rstrip()
        print(f)
        fileidreg= '[0-9]{4}[a-zA-Z]{4}'
        FileID = re.compile(fileidreg)
        if FileID.match(f) and dateSuffix.match(f):
            print(u'cList.key.lower(): ', cList.key.lower())
            old_file = cList.key
            dot_index = old_file.find(u'.')
            print (u'old dot file name: ', dot_index)
            file_ext = old_file[dot_index:]
            cfile = fileId + '_file_' + dateSuffix + file_ext
            tmp_path = "/tmp/folder/" + cfile
            b_path = cVal + cfile
            print (u'b path : ', b_path)
            s3.download_file("us-eu-Bucket", b_path, tmp_path)
            print ("TEMP PATH: ", tmp_path)
            
    if files_not_found:
        print("ALERT", "No file in {0}/{1}".format(bucket, b_folder))

downloadFiletest()

错误:

它在fileId中跳过cFiles.lower():并关闭脚本。

目标:

S3中提取文件并下载到tmp_path,以便按需要使用。在提取文件时,我希望脚本能够根据ID和日期来选择文件。例如:

规则:伪

如果S3有9919USEN_File_20180216.csv和9919USEN_File_20180217.csv文件,那么选择9919USEN_File_20180217.csv下载。另外,如果991USEN_File_2018.csv在S3中不选择文件,因为它不匹配规则,那么fileidreg =‘0-9{4}-Za-Z4}’和dateIdReg = '0-9{8}‘。

规则:可视化

9919USEN_File_20180217.csv > 9919USEN_File_20180216.csv [due to date] 9919USEN_File_20180217.csv > 991USEN_File_2018.csv [Due to Incorrect ID and Date]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 08:25:23

溶液

问题在于它的结构方式。我已经重新组织,并把它放在一个尝试,异常条件循环。我还使用了FileIDPrefix.search而不是FileIDPrefix.match,因为它只是专门查看索引,并且不适合当前的问题。

最终解决方案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import boto3
import re

#connect to s3
client = boto3.resource(u's3', aws_access_key_id=u'KEY',
                   aws_secret_access_key=u'TOKEN')

#used for downloading                      
s3 = boto3.client(u's3', aws_access_key_id=u'KEY',
                   aws_secret_access_key=u'TOKEN')

def downloadFiletest():
  date = '[0-9]{8}'  # fileDate regex
  dateSuffix = re.compile(dates)  # regex used to check the date of the file
  reg = '[0-9]{4}[a-zA-Z]{4}'  # filename regex
  fileIDPrefix = re.compile(reg)  # check fileID of the Filename.

  folder = u"/folder/example/"  # directory
  bucket = client.Bucket(bucketname)  # bucket

  try:
      for cuList in bucket.objects.filter(Prefix=folder):  # filter to the folder

          filenames= cList.key  # directory of the files that we would like to use
          print(cu)

          # specific locations of site fileID of the file and date of the file
          fileID = filenames[33:41]
          fileDate = filenames[51:59]

          # check the length of each values to be verified later.
          lenf = len(fileID)
          lenG = len(fileDate)
          old_file = cList.key
          dot_index = old_file.find(u'.')
          file_ext = old_file[dot_index:]

          # this check that the files in directory match our specified rules. if does it proceeds.
          if fileIDPrefix.search(cu) and fileDateSuffix.search(cu):
              filename = fileID + u'_file_' + fileDate + file_ext
              tmp_path = "/tmp/mpcmt/" + filename
              file_path = folder + filename
              s3.download_file(bucketname, file_path, tmp_path)


              return filename, tmp_path, fileID, fileDate

              # this check the number of values/char in a directory to see it matches up to what is expected.

          if dot_index > 59 or dot_index < 59:
                  print('File has wrong fileID or Wrong Date')
          if lenG > 8 or lenG < 8:
                  print('File has wrong fileDate Format')
          if lenf > 8 or lenf < 8:
                  print('File has wrong fileID')

  except Exception as e:  # this closes and displays an error if the file doesn't exist.
      print("ALERT", "No file in {0}/{1}".format(bucket, folder))
      # There was some issue / error / problem and that is why the program is exiting.
      print >> sys.stderr, "No file in {0}/{1}".format(bucket, folder)
      print >> sys.stderr, "Exception: %s" % str(e)
      sys.exit(1)


downloadFiletest()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52186556

复制
相关文章
Python 基于Python实现Ftp文件上传,下载
支持FTP文件上传、下载,可以上传目录(分区除外),也可以上传单个文件;可以下载整个目录(/根目录除外),也可以下载单个文件
授客
2019/09/11
5.4K0
Python 基于Python实现Ftp文件上传,下载
spring整合s3实现文件上传下载
pom依赖 <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.803</version> </
高大北
2022/10/31
1.9K0
JavaScript 下载文件并保持原文件名称
注:此代码只是个人根据当时的环境满足了当时的需求,记录下来用做后续参考!如有问题,请检查软硬件环境是否一致,由于时间精力有限,大部分未做详细环境描述。
全栈程序员站长
2022/09/06
7700
python日期和时间
python中常用的处理时间的模块有两个:time 模块、datetime 模块,time模块是比较基础的一个模块,可满足对时间类型数据的基本处理;而 datetime模块可以看做是 对time模块的一个高级封装,功能更加强大,例如在时间的加减上(获取指定时间的前(后)一天的时间,获取指定时间的前(后)一小时的时间),使用datetime模块,实现起来更为方便~
py3study
2020/01/03
2.3K0
python日期和时间
python文件下载
百度云源代码和几k,mm图片分享 下载简书交友的图片.网站 https://www.jianshu.com/c/bd38bd199ec6 import urllib.request import urllib.parse import re import os import random def get_road(url0): req=urllib.request.Request(url0) req.add_header('User-Agent', 'Mozilla/5.0 (Window
热心的社会主义接班人
2018/05/16
1.5K0
Python 日期和时间
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
Python知识大全
2020/02/13
2K0
Spring Cloud gateway 文件下载 文件名称 乱码解决方案
=============================================
爱明依
2019/04/25
3.3K0
Spring Cloud  gateway  文件下载 文件名称 乱码解决方案
python+django 如何上传文件和下载文件
Models 中新建了一个模型,并且设置 path 为 FileFiled 格式的 这样就可设置为文件属性了,在django-web上上传文件时,path为文件的路径,相信这点官网已经写的非常详细了 下面记录下如何指定文件的存储路径、文件访问路径、文件下载
onety码生
2018/11/21
3.8K0
【android系统】使用s3来上传下载文件
我们的安卓容器需要使用 s3 来进行一些文件的上传和下载,因为 s3cmd 是 Python 写的,所以想运行 s3cmd,估计是不行的,如果需要使用静态编译的 s3 客户端程序,随手在 github 上搜了一个 s3-cli,这个项目是用 Go 写的,所以只要在本地编译的时候加上 static 就可以了。
runzhliu
2020/08/05
1.3K0
python实现文件下载
Python实现文件下载 # -*- coding:utf-8 -*- import struct from socket import * import time import os def main(): #0. 获取要下载的文件名字: downloadFileName = input("请输入要下载的文件名:") #1.创建socket udpSocket = socket(AF_INET, SOCK_DGRAM) requestFileData = struct.pack("!
AI拉呱
2021/01/14
9180
文件上传和下载
进行javaWeb项目的开发,文件上传和下载还是被比较普遍的使用到一种技术,之前都是使用专用的文件服务器进行文件的存储,今天要介绍的是基于mongodb数据库进行文件的存储。
码农王同学
2020/03/25
1.1K0
文件上传和下载
文件上传和下载是JAVA WEB中常见的一种操作,文件上传主要是将文件通过IO流传输到服务器的某一个特定的文件夹下;刚开始工作那会一个上传文件常常花费小半天的时间。自从有了springboot之后,简单到小学生都会的操作。废话不说,直接开始。
用户3467126
2019/07/03
1.1K0
文件上传和下载
​ encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼 接,然后以二进制流的形式发送给服务器。
上分如喝水
2021/08/16
1.2K0
文件上传和下载
Python获取当前日期和日期差计算
关于python的日期和时间,用法很多,此处只记录自己比较常用的部分,后面有时间再学习一下时间戳。
py3study
2020/01/19
10.9K0
python-将文件按日期分类
小米云盘只有5G,不经意间存了一些乱七八糟的东西,我希望将他们全部下载后然后清空小米云盘,这样小米云就不会偷偷地把一些我已经删掉的资料再同步给我的手机。 导致删不敢删,留着也烦人。我不希望那些公司玩弄我的资料。 下载后的文件自动按照时间分类创建一系列的文件夹分别存入下载的内容。 数千个文件按时间以及格式归类创建文件夹
全栈程序员站长
2021/05/19
1.7K0
文件上传和下载
文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"
用户9615083
2022/12/25
1.1K0
文件上传和下载
使用python上传和下载文件到Fast
3. 新建测试文件test_fdfs.py,把下载解压后安装包的.../FastDFS/conf/client.conf文件复制到/etc/fdfs下:
py3study
2020/01/09
1.3K0
linux和windows文件名称长度限制
windows下全然限定文件名称必须少于260个字符,文件夹名必须小于248个字符。
全栈程序员站长
2021/11/18
6.8K0
图解python | 时间和日期处理
教程地址:http://www.showmeai.tech/tutorials/56
ShowMeAI
2022/02/23
1.3K0
图解python | 时间和日期处理
python 获取n天前的日期和日期列表
import datetime def get_nday_list(n): import datetime before_n_days = [] for i in range(1, n + 1)[::-1]: before_n_days.append(str(datetime.date.today() - datetime.timedelta(days=i))) return before_n_days
用户5760343
2022/05/13
3.2K0

相似问题

<AWS S3>如何基于修改的日期下载S3桶文件?

12

亚马逊S3更改文件下载名称

8151

基于Vimwiki中日期和时间的名称文件

18

Python -从AWS S3下载当前日期的文件

10

基于日期宏下载excel文件名

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文