小编Ksh*_*wah的帖子

在Python中从AWS S3读取gzip文件的内容

我正在尝试从我在AWS中运行的Hadoop进程中读取一些日志.日志存储在S3文件夹中,并具有以下路径.

bucketname = name key = y/z/stderr.gz这里Y是集群ID,z是文件夹名称.这两者都充当AWS中的文件夹(对象).所以完整路径就像x/y/z/stderr.gz.

现在我想解压缩.gz文件并读取文件的内容.我不想将此文件下载到我的系统想要将内容保存在python变量中.

这是我到现在为止所尝试的.

bucket_name = "name"
key = "y/z/stderr.gz"
obj = s3.Object(bucket_name,key)
n = obj.get()['Body'].read()
Run Code Online (Sandbox Code Playgroud)

这给了我一种不可读的格式.我也试过了

n = obj.get()['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

这给出了错误utf8'编解码器无法解码位置1中的字节0x8b:无效的起始字节.

我也试过了

gzip = StringIO(obj)
gzipfile = gzip.GzipFile(fileobj=gzip)
content = gzipfile.read()
Run Code Online (Sandbox Code Playgroud)

这将返回错误IOError:不是gzip压缩文件

不确定如何解码此.gz文件.

编辑 - 找到解决方案.需要传递n并使用BytesIO

gzip = BytesIO(n)
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3

19
推荐指数
4
解决办法
1万
查看次数

使用Gmail发送附件R的电子邮件

我试图从我的系统附加一个文件,使用R将其发送到电子邮件ID.我正在使用gmailr包发送邮件.我尝试了以下代码.

library(gmailr)

mime() %>%
to("abcd@gmail.com") %>%
from("xyz@gmail.com") %>%
text_body("My First Email using R.") -> first_part

first_part %>%
subject("Test Mail from R") %>%
attach_file("BazaarQueriesforURLData.txt") -> file_attachment

send_message(file_attachment)
Run Code Online (Sandbox Code Playgroud)

我已经能够发送基于文本的消息,但我无法从R发送附件.我的附件只在默认目录文件夹中.我在互联网上看到了很多解决方案但我无法找到解决方案.

我希望有一个具有正确的OAuth或基于Json的身份验证的解决方案,因为Google阻止了我尝试使用基于smtp的身份验证.

email r gmail-api

13
推荐指数
1
解决办法
2573
查看次数

使用boto3和回调跟踪S3文件的下载进度

我正在尝试使用boto3从S3下载文本文件.

这是我写的.

class ProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()

    def __call__(self, bytes_amount):
        # To simplify we'll assume this is hooked up
        # to a single filename.
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = round((self._seen_so_far / self._size) * 100,2)
            LoggingFile('{} is the file name. {} out of {} done. The percentage completed is {} %'.format(str(self._filename), str(self._seen_so_far), str(self._size),str(percentage)))
            sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

而我正在使用它

transfer.download_file(BUCKET_NAME,FILE_NAME,'{}{}'.format(LOCAL_PATH_TEMP , FILE_NAME),callback = ProgressPercentage(LOCAL_PATH_TEMP + FILE_NAME))
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,该文件夹中没有该文件.显然,当我已经在同一文件夹中有一个具有此名称的文件时,它可以工作,但是当我下载一个新文件时,它会出错.

我需要做出哪些更正?

python callback amazon-s3 boto3

8
推荐指数
4
解决办法
8643
查看次数

在数据框列中的"/"之后提取文本

我有一个数据框,有两列LinkValue.该Link列的值为"abcd.com/efgh/ijkl/mnop",是一个URL.此帧中有10,000行,我从100,000行的样本中获取.

现在我想从左到右提取最后一个"/"后的数据,或者从右到左提取第一个"/".所以对于例如上面显示的示例我是提取"mnop"

我想对所有的10,000行是有列做到这一点Link,而Value列不应进行.

我能够使用

a = sapply(webdatatest, substring, 36)
Run Code Online (Sandbox Code Playgroud)

但这不是一个动态的方法,因为最后"/"的位置会改变.这也影响了第二列.

所以需要一些帮助.

r dataframe

2
推荐指数
1
解决办法
982
查看次数

在python中汇总数据框和行数

我仍然处于python的学习阶段,想知道我们如何汇总数据并计算名为count的列中的重复数据行

数据帧结构如下

Col1| Value
A   |  1
B   |  1
A   |  1
B   |  1
C   |  3
C   |  3
C   |  3
C   |  3
Run Code Online (Sandbox Code Playgroud)

我的结果应该如下

Col1|Value|Count
 A  |  1  | 2
 B  |  1  | 2
 C  |  3  | 4
Run Code Online (Sandbox Code Playgroud)

python rollup dataframe pandas

2
推荐指数
1
解决办法
2484
查看次数