如何在不使用 pandas 的情况下将 Google sheet 导出为 Python 中的 CSV?
How do I export a Google sheet as a CSV in Python without using pandas?
我正在使用 Python 3.9 和以下版本的 Google Sheets ...
gsheets==0.5.1
gspread==3.6.0
我正在尝试将我的 Google sheet 导出为 CSV 文件。在 Python 的旧版本中,我像这样使用 Pandas 模块
import gspread
...
client = gspread.authorize(creds)
sheet = client.open('My_Sheet_name')
# get the third sheet of the Spreadsheet. This
# contains the data we want
sheet_instance = sheet.get_worksheet(3)
records_data = sheet_instance.get_all_records()
records_df = pd.DataFrame.from_dict(records_data)
# view the top records
records_df.to_csv(sys.stdout)
如何在不使用 Pandas 的情况下导出 CSV?我问是因为 Python 的较新版本(例如 3.9)似乎还不支持 pandas 模块。
您可以使用 csv 模块中的 DictWriter 将每个字典作为单独的行添加到 csv 结果中:
import sys
from csv import DictWriter
dict_writer = DictWriter(sys.stdout, records_data[0].keys())
dict_writer.writeheader()
for data in records_data:
dict_writer.writerow(data)
如果您想将 csv 写入文件而不是 stdout,可以改用此代码段:
from csv import DictWriter
with open('./path/to/the/file', 'w') as csvfile:
dict_writer = DictWriter(csvfile, records_data[0].keys())
dict_writer.writeheader()
for data in records_data:
dict_writer.writerow(data)
示例:
records_data
包含以下值:[{'a': 1, 'b': 2}, {'a': 2, 'b': 3}, {'a': 3, 'b': 4}]
然后 header 取自列表任意元素的键(在本例中是第一个元素):a
和 b
.
然后将值逐行添加到 csv:
a, b
1, 2
2, 3
3, 4
我认为您的目标如下。
- 您想检索 Google Spreadsheet 中的 sheet 之一作为 CSV 数据。
- 您想在不使用 Pandas 的情况下使用 gspread 实现此目的。
- 您已经可以使用gspread了。
在这种情况下,为了实现您的目标,我想建议使用端点将 sheet 导出为 CSV 数据。从 client = gspread.authorize(creds)
的 client
检索访问令牌。当这个提议反映到你的脚本中,就变成了这样。
修改后的脚本:
client = gspread.authorize(creds)
sheet = client.open('My_Sheet_name')
# get the third sheet of the Spreadsheet. This
# contains the data we want
sheet_instance = sheet.get_worksheet(2) # Modified
# I added below script.
url = 'https://docs.google.com/spreadsheets/d/' + sheet.id + '/gviz/tq?tqx=out:csv&gid=' + str(sheet_instance.id)
headers = {'Authorization': 'Bearer ' + client.auth.token}
res = requests.get(url, headers=headers)
print(res.text)
- 在上面的脚本中,请添加
import requests
。
- 当上面的脚本是 运行 时,第 3 个 sheet 被导出为 CSV 数据。
注:
关于 sheet_instance = sheet.get_worksheet(3)
,您的评论说 get the third sheet of the Spreadsheet.
。但是 get_worksheet
的第一个数字是 0
。因此,在这种情况下,将检索 Spreadsheet 中的第 4 个 sheet。请注意这一点。
在这种情况下,我认为您也可以使用如下端点。
url = 'https://docs.google.com/spreadsheets/d/' + sheet.id + '/export?format=csv&gid=' + str(sheet_instance.id)
我正在使用 Python 3.9 和以下版本的 Google Sheets ...
gsheets==0.5.1
gspread==3.6.0
我正在尝试将我的 Google sheet 导出为 CSV 文件。在 Python 的旧版本中,我像这样使用 Pandas 模块
import gspread
...
client = gspread.authorize(creds)
sheet = client.open('My_Sheet_name')
# get the third sheet of the Spreadsheet. This
# contains the data we want
sheet_instance = sheet.get_worksheet(3)
records_data = sheet_instance.get_all_records()
records_df = pd.DataFrame.from_dict(records_data)
# view the top records
records_df.to_csv(sys.stdout)
如何在不使用 Pandas 的情况下导出 CSV?我问是因为 Python 的较新版本(例如 3.9)似乎还不支持 pandas 模块。
您可以使用 csv 模块中的 DictWriter 将每个字典作为单独的行添加到 csv 结果中:
import sys
from csv import DictWriter
dict_writer = DictWriter(sys.stdout, records_data[0].keys())
dict_writer.writeheader()
for data in records_data:
dict_writer.writerow(data)
如果您想将 csv 写入文件而不是 stdout,可以改用此代码段:
from csv import DictWriter
with open('./path/to/the/file', 'w') as csvfile:
dict_writer = DictWriter(csvfile, records_data[0].keys())
dict_writer.writeheader()
for data in records_data:
dict_writer.writerow(data)
示例:
records_data
包含以下值:[{'a': 1, 'b': 2}, {'a': 2, 'b': 3}, {'a': 3, 'b': 4}]
然后 header 取自列表任意元素的键(在本例中是第一个元素):a
和 b
.
然后将值逐行添加到 csv:
a, b
1, 2
2, 3
3, 4
我认为您的目标如下。
- 您想检索 Google Spreadsheet 中的 sheet 之一作为 CSV 数据。
- 您想在不使用 Pandas 的情况下使用 gspread 实现此目的。
- 您已经可以使用gspread了。
在这种情况下,为了实现您的目标,我想建议使用端点将 sheet 导出为 CSV 数据。从 client = gspread.authorize(creds)
的 client
检索访问令牌。当这个提议反映到你的脚本中,就变成了这样。
修改后的脚本:
client = gspread.authorize(creds)
sheet = client.open('My_Sheet_name')
# get the third sheet of the Spreadsheet. This
# contains the data we want
sheet_instance = sheet.get_worksheet(2) # Modified
# I added below script.
url = 'https://docs.google.com/spreadsheets/d/' + sheet.id + '/gviz/tq?tqx=out:csv&gid=' + str(sheet_instance.id)
headers = {'Authorization': 'Bearer ' + client.auth.token}
res = requests.get(url, headers=headers)
print(res.text)
- 在上面的脚本中,请添加
import requests
。 - 当上面的脚本是 运行 时,第 3 个 sheet 被导出为 CSV 数据。
注:
关于
sheet_instance = sheet.get_worksheet(3)
,您的评论说get the third sheet of the Spreadsheet.
。但是get_worksheet
的第一个数字是0
。因此,在这种情况下,将检索 Spreadsheet 中的第 4 个 sheet。请注意这一点。在这种情况下,我认为您也可以使用如下端点。
url = 'https://docs.google.com/spreadsheets/d/' + sheet.id + '/export?format=csv&gid=' + str(sheet_instance.id)