如何替换使用 Google 表格 API 下载的 CSV 文件中的换行符? 修改点:修改后的脚本:

问题描述

我使用的是 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 数据中每一行的换行符。

修改点:

  • 当我测试你的脚本时,每一行的换行符也被删除了。因此,在这种情况下,我想提出以下流程。
    1. 解析 CSV 数据并将其转换为列表。
    2. 删除每个单元格中的换行符。
    3. 将列表转换为 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 csvimport io

  • 如果不想为每个单元格添加",请修改如下。

      output = "\n".join([",[c.replace('\n','') for c in r])) for r in ar])