簡體   English   中英

如何將查詢結果格式化為CSV?

[英]How to format query results as CSV?

我的目標:將執行查詢的操作自動化,並將 output 結果轉換為 csv。

我已經成功地使用 Python 獲得了查詢結果(這是我在 Python 中的第一個項目)。 我試圖將這些結果格式化為 csv 但我完全迷路了。 它基本上只是創建了 2 個大行,所有數據都沒有被解析出來。 附上 .txt 和 .csv 結果(我通過簡單地調用查詢並輸入“文件名 > results.txt”或“文件名 > results.csv”獲得這些結果。

txt 結果: {'data': {'get_result': {'job_id': None, 'result_id': '72a17fd2-e63c-4732-805a-ad6a7b980a99', '__typename': 'get_result_response'}}} {'data': {'query_results': [{'id': '72a17fd2-e63c-4732-805a-ad6a7b980a99', 'job_id': '05eb2527-2ca0-4dd1-b6da-96fb5aa2e67c', 'error': None, 'runtime': 157, 'generated_at': '2022-04-07T20:14:36.693419+00:00', 'columns': ['project_name', 'leaderboard_date', 'volume_30day', 'transactions_30day', 'floor_price', 'median_price', 'unique_holders', 'rank', 'custom_sort_order'], '__typename': 'query_results'}], 'get_result_by_result_id': [{'data': {'custom_sort_order': 'AA', 'floor_price': 0.375, 'leaderboard_date': '2022-04-07', 'median_price': 343.4, 'project_name': 'Terraforms by Mathcastles', 'rank': 1, 'transactions_30day': 2774, 'unique_holders': 2179, 'volume_30day': 744611.6252}, '__typename': 'get_result_template'}, {'data': {'custom_sort_order': 'AB', 'floor_price': 4.69471, 'leaderboard_date': '2022-04-07', 'median_price': 6.5, 'project_name': 'Meebits', 'rank': 2, 'transactions_30day': 4153, 'unique_holders': 6200, 'volume_30day': 163520.7377371168}, '__typename': 'get_result_template'}, {'data': {'get_result': {'job_id': None, 'result_id': '72a17fd2-e63c-4732-805a-ad6a7b980a99', '__typename': 'get_result_response'}}} {'data': {'query_results': [{'id': '72a17fd2-e63c-4732-805a-ad6a7b980a99', 'job_id': '05eb2527-2ca0-4dd1-b6da-96fb5aa2e67c', 'error': None, 'runtime': 157, 'generated_at': '2022-04-07T20:14:36.693419+00:00', 'columns': ['project_name', 'leaderboard_date', 'volume_30day', 'transactions_30day', 'floor_price', 'median_price', 'unique_holders', 'rank', 'custom_sort_order'], '__typename': 'query_results'}], 'get_result_by_result_id': [{'data': {'custom_sort_order': 'AA', 'floor_price': 0.375, 'leaderboard_date': '2022-04-07', 'median_price': 343.4, 'project_name': 'Terraforms by Mathcastles', 'rank': 1, 'transactions_30day': 2774, 'unique_holders': 2179, 'volume_30day': 744611.6252}, '__typename': 'get_result_template'}, {'data': {'custom_sort_order': 'AB', 'floor_price': 4.69471, 'leaderboard_date': '2022-04-07', 'median_price': 6.5, 'project_name': 'Meebits', 'rank': 2, 'transactions_30day': 4153, 'unique_holders': 6200, 'volume_30day': 163520.7377371168}, '__typename': 'get_result_template'},等(重復 100 行) ..

看來您在 python 字典中有數據。 谷歌表說訪問被拒絕所以我看不到全部數據。

但本質上,您想將字典數據轉換為 csv 文件。

在最基本的情況下,您可以使用這樣的代碼來到達您需要的地方。 對於您的示例,您需要深入了解行的實際位置。

import csv
new_path = open("mytest.csv", "w")
file_dictionary = {"oliva":199,"james":145,"potter":187}

z = csv.writer(new_path)
for new_k, new_v in file_dictionary.items():
    z.writerow([new_k, new_v])

new_path.close()

本指南應該可以幫助您。 https://pythonguides.com/python-dictionary-to-csv/

如果我理解你的問題是對的,你應該用你的結果構建一個 dataframe 格式,然后將 dataframe 保存為 .csv 格式。 Pandas庫非常有用且易於使用。

您的results文本字符串實際上包含兩個由空格字符分隔的詞典。
以下是其中每個內容的格式化版本:

dict1 = {'data': {'get_result': {'job_id': None,
                                 'result_id': '72a17fd2-e63c-4732-805a-ad6a7b980a99',
                                 '__typename': 'get_result_response'}}}

dict2 = {'data': {'query_results': [{'id': '72a17fd2-e63c-4732-805a-ad6a7b980a99',
                                     'job_id': '05eb2527-2ca0-4dd1-b6da-96fb5aa2e67c',
                                     'error': None,
                                     'runtime': 157,
                                     'generated_at': '2022-04-07T20:14:36.693419+00:00',
                                     'columns': ['project_name',
                                                 'leaderboard_date',
                                                 'volume_30day',
                                                 'transactions_30day',
                                                 'floor_price',
                                                 'median_price',
                                                 'unique_holders',
                                                 'rank',
                                                 'custom_sort_order'],
                                     '__typename': 'query_results'}],
                  'get_result_by_result_id': [{'data': {'custom_sort_order': 'AA',
                                                        'floor_price': 0.375,
                                                        'leaderboard_date': '2022-04-07',
                                                        'median_price': 343.4,
                                                        'project_name': 'Terraforms by Mathcastles',
                                                        'rank': 1,
                                                        'transactions_30day': 2774,
                                                        'unique_holders': 2179,
                                                        'volume_30day': 744611.6252},
                                               '__typename': 'get_result_template'},
                                              {'data': {'custom_sort_order': 'AB',
                                                        'floor_price': 4.69471,
                                                        'leaderboard_date': '2022-04-07',
                                                        'median_price': 6.5,
                                                        'project_name': 'Meebits',
                                                        'rank': 2,
                                                        'transactions_30day': 4153,
                                                        'unique_holders': 6200,
                                                        'volume_30day': 163520.7377371168},
                                               '__typename': 'get_result_template'},
                                             ]}}

(順便說一句,我使用pprint模塊對它們進行格式化。這通常是處理這類問題的良好開端——所以你知道你在處理什么。)

完全忽略第一個,除了第二個中的重復數據——我認為這是你真正想要的——你可以從dict2['data']['get_result_by_result_id']中的嵌套字典值創建一個 CSV 文件列表。 下面是如何使用csv.DictWriter class 來完成的:

import csv
from pprint import pprint  # If needed.


output_filepath = 'query_results.csv'

# Determine CSV fieldnames based on keys of first dictionary.
fieldnames = dict2['data']['get_result_by_result_id'][0]['data'].keys()

with open(output_filepath, 'w', newline='') as outp:
    writer = csv.DictWriter(outp, delimiter=',', fieldnames=fieldnames)
    writer.writeheader()  # Optional.

    for result in dict2['data']['get_result_by_result_id']:
#        pprint(result['data'], sort_dicts=False)
        writer.writerow(result['data'])

print('fini')

使用測試數據,這里是它創建的'query_results.csv'文件的內容:

custom_sort_order,floor_price,leaderboard_date,median_price,project_name,rank,transactions_30day,unique_holders,volume_30day
AA,0.375,2022-04-07,343.4,Terraforms by Mathcastles,1,2774,2179,744611.6252
AB,4.69471,2022-04-07,6.5,Meebits,2,4153,6200,163520.7377371168

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM