从Lambda的/ tmp文件夹中读取csv文件,对其进行过滤并将其上传到s3

问题描述 投票:0回答:1

我有一个需要根据用户登录信息进行过滤的文件,然后将过滤后的文件上传到s3。

这是我的代码:

csv_file = csv.reader(open('/tmp/users.csv', "r"))
    for row in csv_file:
        if result > row[6]: #'result' is the date I'm measuring against column 6 of the csv

            with open('/tmp/filtered.csv', 'w') as g:
                wf = csv.writer(g)
                wf.writerow(['User', 'First', 'Last', 'Email', 'Local', 'Membership', 'Login'])
                wf.writerows(row)
                print (row)
            bucket.upload_file('/tmp/filtered.csv', key)

虽然'print(row)'行给了我这个输出:

enter image description here

上传到s3的实际csv文件如下:

enter image description here

我在文件中得到的csv输出等于一个用户。我想通过筛选在正确格式的列表中找到所有用户。任何帮助,将不胜感激。

编辑:当我将行从'wf.writerows(row)'更改为'wf.writerow(row)'时,文件格式正确,但在整个数据集中仍然只有一个用户(最后一个)。

python-3.x amazon-s3 aws-lambda
1个回答
0
投票

我想说您的问题与您正在打开输出文件对于每一行

有关。
for row in csv_file:
    with open('/tmp/filtered.csv', 'w') as g:
        wf = csv.writer(g)
        ...

这意味着输出文件的内容将被每一行覆盖。

相反,打开输出文件并创建csv编写器之前循环遍历输入文件的每一行:

with open('/tmp/filtered.csv', 'w') as output_file:
    wf = csv.writer(output_file)
    wf.writerow(['User', 'First', 'Last', 'Email', 'Local', 'Membership', 'Login'])

    csv_file = csv.reader(open('/tmp/users.csv', "r"))
    for row in csv_file:
        if result > row[6]:
            wf.writerow(row)

bucket.upload_file('/tmp/filtered.csv', key)

这样,将只创建一个输出文件。

© www.soinside.com 2019 - 2024. All rights reserved.