问题描述
我使用的是 Python 3.9 和适用于 Python v 3.6.0 的 Google Sheets SDK。我想以 CSV 格式下载 Google 表格,并且我想用空替换单元格数据中出现的任何新行字符。我尝试了以下
client = gspread.authorize(creds)
sheet = client.open('ChiCommons_Directory')
# get the third sheet of the Spreadsheet. This
# contains the data we want
sheet_instance = sheet.get_worksheet(3)
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)
output = re.sub(r'[\n\r]','',res.text)
print(output)
这似乎并没有取代任何东西。具体线路 output = re.sub(r'[\n\r]',res.text) 似乎没有完成它的工作。但是,我只想替换单元格数据中的新行,而不是分隔每行数据的新行。不确定这样做的最佳方法。
解决方法
我相信你的目标如下。
- 您想替换每个单元格中的换行符。
- 您不想替换 CSV 数据中每一行的换行符。
修改点:
- 当我测试你的脚本时,每一行的换行符也被删除了。因此,在这种情况下,我想提出以下流程。
- 解析 CSV 数据并将其转换为列表。
- 删除每个单元格中的换行符。
- 将列表转换为 CSV 数据。
当以上几点反映到你的脚本中时,它变成如下。
修改后的脚本:
请按如下方式修改您的脚本。
从:output = re.sub(r'[\n\r]','',res.text)
print(output)
到:
ar = csv.reader(io.StringIO(res.text,newline=""))
output = "\n".join([",".join(map(str,['"' + c.replace('\n','') + '"' for c in r])) for r in ar])
# or,output = "\n".join([",['"' + re.sub(r'[\n\r]',c) + '"' for c in r])) for r in ar])
print(output)
-
在这种情况下,请使用
import csv
和import io
。 -
如果不想为每个单元格添加
"
,请修改如下。output = "\n".join([",[c.replace('\n','') for c in r])) for r in ar])