python - 从 gspread 创建一个 csv 文件,用 pandas 跳过一些行
问题描述
我正在创建一个 csv 文件来迭代它并使用 Python 发送电子邮件。代码对我有用,但我认为我编写太多代码只是为了从 Google SpreadSheet 获取数据、跳过一些行并对其进行迭代。
这是我的代码:
import csv
import pandas as pd
import smtplib
from settings_djg import SENDER_EMAIL, SENDER_PASS # Email settings file
from datetime import date, datetime
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from email.message import EmailMessage
from itertools import islice
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)
sheet = client.open("Hosting_Domains").sheet1
list_of_hashes = sheet.get_all_values()
new_list = pd.DataFrame(list_of_hashes)
# Here I'm using .iloc to skip some rows
new_list.iloc[[0,2,3,4,5,6,7,13,14,15,16,17,18,19,20]].to_csv('my_csv.csv', index=False, header=False)
msg = EmailMessage()
now = date.today()
# Here starts iteration
with open('my_csv.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
next(csv_reader)
for row in csv_reader:
来自 Google SpreadSheet 的数据如下:
X,DOMAIN,EXPIRE,OWNER,REGISTRANT,HOSTING
,,,CUSTOMERS,,,
B,company.com,2021-02-13,Customer,SITEGROUND,SITEGROUND
D,companyb.com,2021-05-17,Customer,GODDADY,GODDADY
E,companyc.com,2021-09-19,Customer,GODDADY,GODDADY
D,companye.com,2021-01-23,Customer,GODDADY,GODDADY
解决方案
我相信你的目标如下。
- 您希望通过使用 gspread 和 python 选择行来从 Google 电子表格中检索值作为 CSV 数据。
- 在这种情况下,您不想使用
iloc
并将其另存为文件。
- 在这种情况下,您不想使用
- 作为示例,您希望从
[0,2,3,4,5,6,7,13,14,15,16,17,18,19,20]
工作表中检索行。- 在这种情况下,
0
包括在内。所以我认为这0
是第一排。
- 在这种情况下,
修改点:
[0,2,3,4,5,6,7,13,14,15,16,17,18,19,20]
数组的索引是什么时候list_of_hashes
,我认为可以使用 检索所需的行[0,2,3,4,5,6,7,13,14,15,16,17,18,19,20]
。
当这一点反映到您的脚本中时,它变成如下。
修改后的脚本:
list_of_hashes = sheet.get_all_values()
values = [list_of_hashes[e] for e in [0, 2, 3, 4, 5, 6, 7, 13, 14, 15, 16, 17, 18, 19, 20]]
df = pd.DataFrame(values)
values
是检索到所需行的数组。df
是从 转换的数据帧values
。
推荐阅读
- python - ImportError:导入 _pyorc 时 DLL 加载失败
- typescript - 仅为对象的值设置类型
- r - 使用 R 中的 table() 对数据帧中具有不同长度的变量进行计数
- android - Android - 使用键盘应用程序保护用户的隐私
- python - 使用python中的范围从结尾打印字符串的字符到开头
- linux - 从汇编程序调用时 dlsym 崩溃
- javascript - 如何使用 twilio 通过 whatsapp 发送本地存储的媒体文件 .. node js express
- java - 将 LocalTime 分钟/秒格式化为整数 Java
- html - 如何从我的 Django 网站下载文件?
- c# - 如何在 Xamarin Forms Android 应用程序的 BackgroundService 中集成 rabbitmq 客户端?