如何替换使用 Google 工作表 API 下载的 CSV 文件中的换行符?
How do I replace new lines characters in CSV files downloaded using the Google sheets API?
我正在使用 Python 3.9 和 Google Sheets SDK for Python v 3.6.0。我想下载一个 Google sheet 作为 CSV,我想用任何东西替换单元格数据中出现的任何换行符。我尝试了以下
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)
这似乎没有替代任何东西。具体线路
输出 = 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([",".join(map(str, ['"' + re.sub(r'[\n\r]', '', c) + '"' for c in r])) for r in ar])
print(output)
在这种情况下,请使用import csv
和import io
。
如果不想为每个单元格添加"
,请修改如下。
output = "\n".join([",".join(map(str, [c.replace('\n', '') for c in r])) for r in ar])
我正在使用 Python 3.9 和 Google Sheets SDK for Python v 3.6.0。我想下载一个 Google sheet 作为 CSV,我想用任何东西替换单元格数据中出现的任何换行符。我尝试了以下
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)
这似乎没有替代任何东西。具体线路 输出 = 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([",".join(map(str, ['"' + re.sub(r'[\n\r]', '', c) + '"' for c in r])) for r in ar])
print(output)
在这种情况下,请使用
import csv
和import io
。如果不想为每个单元格添加
"
,请修改如下。output = "\n".join([",".join(map(str, [c.replace('\n', '') for c in r])) for r in ar])