当导出为csv或tsv并使用Python requests.get()检索时,处理Google Sheet中的多行字段

e4eetjau  于 2022-12-06  发布在  Python
关注(0)|答案(2)|浏览(135)

假设我有一个Google表单,看起来像这样。

您可以将其导出,以便可以通过类似于以下内容的URL访问它

# CSV
https://docs.google.com/spreadsheets/d/e/Eis4Ya-Le9Py/pub?gid=0&single=true&output=csv
# TSV
https://docs.google.com/spreadsheets/d/e/Eis4Ya-Le9Py/pub?gid=0&single=true&output=tsv

如果您下载该档案并在Open Office上开启它,您可以清楚地看到它可识别多行。

这是因为有多行的字段会被“"括起来。
在纯文本编辑器中,它看起来像

然而,这里有一个问题,如果我使用python requests库获取文件,双引号会被删除。

import requests

r=requests.get(url)

print(r.text)
print(r.content)
print(r.headers)

id  description
1   one line
2   line1 line2
3   l1 l2 empty line below  end
4   normal

b'id\tdescription\r\n1\tone line\r\n2\tline1 line2\r\n3\tl1 l2 empty line below  end\r\n4\tnormal'

{'Content-Type': 'text/tab-separated-values', 'X-Frame-Options': 'ALLOW-FROM https://docs.google.com', ... , 'Transfer-Encoding': 'chunked'}

为什么?
我该如何改变这种行为?
我知道有一个处理csv文件的库,但我无法在我所处的环境中使用它。

v2g6jxz6

v2g6jxz61#

感谢@洛雷纳Gomez,我找到了答案。
无论您是否请求tsv / csv文件,* 行为都是不同的,因为 * tsv文件不包括字段中可能出现的“换行符”。
在代码中:

url_base="https://docs.google.com/spreadsheets/d/e/2PA...be/pub?gid=0&single=true&output="

import io
import requests

# simple test
# file exported as csv
url=url_base+"csv"

s=requests.get(url)
print("-------- CSV -----------")
print(s.text)
print(s.content)

url=url_base+"tsv"

s=requests.get(url)
print("-------- TSV -----------")
print(s.text)
print(s.content)

生产

-------- CSV -----------
,
1,one line
2,"two
lines"
3,"three

lines"
4,"empty below

end"
b',\r\n1,one line\r\n2,"two\nlines"\r\n3,"three\n\nlines"\r\n4,"empty below\n\nend"'
-------- TSV -----------
    
1   one line
2   two lines
3   three  lines
4   empty below  end
b'\t\r\n1\tone line\r\n2\ttwo lines\r\n3\tthree  lines\r\n4\tempty below  end'

在文本编辑器中打开2。

xe55xuns

xe55xuns2#

再加上@Rub的回答,问题不在于requests库。根据this信息:
制表符分隔值(TSV)文件是一种简单的文本格式,用于在表格结构中存储数据...表中的每条记录都是文本文件的一行。记录的每个字段值都由制表符与下一个字段值分隔。
因此,这意味着在导出到.tsv文件后,预期不会保留换行符。

相关问题