我有一个需要根据用户登录信息进行过滤的文件,然后将过滤后的文件上传到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)'行给了我这个输出:
上传到s3的实际csv文件如下:
我在文件中得到的csv输出等于一个用户。我想通过筛选在正确格式的列表中找到所有用户。任何帮助,将不胜感激。
编辑:当我将行从'wf.writerows(row)'更改为'wf.writerow(row)'时,文件格式正确,但在整个数据集中仍然只有一个用户(最后一个)。
我想说您的问题与您正在打开输出文件对于每一行:
有关。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)
这样,将只创建一个输出文件。