我正在从 S3 下载文件,转换其中的数据,然后创建一个新文件上传到 S3。我下载的文件不到 2GB,但因为我正在增强数据,所以当我上传它时,它非常大(200GB+)。
目前你可以想象的代码是这样的:
files = list_files_in_s3()
new_file = open('new_file','w')
for file in files:
file_data = fetch_object_from_s3(file)
str_out = ''
for data in file_data:
str_out += transform_data(data)
new_file.write(str_out)
s3.upload_file('new_file', 'bucket', 'key')
Run Code Online (Sandbox Code Playgroud)
这样做的问题是“new_file”有时太大而无法放在磁盘上。因此,我想使用 boto3upload_fileobj
以流形式上传数据,这样我根本不需要磁盘上的临时文件。
有人可以帮忙提供一个例子吗?Python 方法似乎与我熟悉的 Java 完全不同。
是否可以更改类的init函数中的某些内容?
假设我有一个名为“deck”的类,它在初始化时会创建一个包含 52 个卡片对象的列表。
现在我想创建另一个名为“even”的类,它继承自“deck”类并创建一副纸牌对象,但从继承的“deck”中消除所有数字为 2(如黑桃、红心等)的纸牌。
我在这方面遇到了很多麻烦,因为当我尝试修改继承的列表时,无论我尝试什么,python 都会返回错误,通常“NoneType”是问题的主要根源。这是“偶数”类初始化的代码:
def __init__(self):
x = Deck.__init__(self)
for card in x:
if card.rank() == 2:
x.pop(card)
return x
Run Code Online (Sandbox Code Playgroud)
值得注意的是,我的卡片类有一个 rank() 方法,它将以 int 形式返回卡片的等级。
不管我尝试过所有的事情,它总是有问题。有时它会说“'NoneType' 对象不可迭代”或“可订阅”,当我检查 x 的 type() 时,它是一个 NoneType。我已经做了很多搜索,但对我来说 NoneType 或我应该做些什么来解决它没有任何意义。
如果我删除 for 循环,那么代码将按预期创建一副 52 张卡片,但例如我需要过滤掉 2 张卡片。
编辑:这是我的甲板类init:
class Deck(list):
def __init__(self):
return list.__init__(self, [Card(i) for i in range(52)])
Run Code Online (Sandbox Code Playgroud)
如果你不知道, Card 也是一个类,deck的初始化创建了 52 个卡片对象
我基本上有这个循环,我试图使它,以便GUI中的每个标签都有一个特定的名称,所以我可以单独更改它们.我希望它是cardlabelxy,其中x是行,y是列,但我不知道如何让它工作.这是我有的:
for i in range(2):
for j in range(6):
(cardlabel+'i'+'j') = CardLabel(root)
(cardlabel+'i'+'j').grid(row=i, column=j)
(cardlabel+'i'+'j').configure(image=CardLabel.blank_image)
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解释语法吗?如果我有,循环工作正常
for i in range(2):
for j in range(6):
cardlabel = CardLabel(root)
cardlabel.grid(row=i, column=j)
cardlabel.configure(image=CardLabel.blank_image)
Run Code Online (Sandbox Code Playgroud)
但他们都被称为卡片标签,我不想要.