gpt4 book ai didi

python 3 : urllib, csv reader和StringIO-为什么有区别?

转载 作者:行者123 更新时间:2023-11-28 21:31:14 26 4
gpt4 key购买 nike

这两种方法在 python 3.7.3 中产生不同的结果:

res = urllib.request.urlopen(url, timeout=timeout)
content = res.read().decode('utf-8')
reader = csv.reader(StringIO(content))
lines = list(reader)

还有

res = urllib.request.urlopen(url, timeout=timeout)
content = res.read().decode('utf-8')
reader = csv.reader(content)
lines = list(reader)

前者给了我我想要的,即 CSV 中的行列表,后者给了我一个仅包含长度为 1 的单个字符列表的列表(文本中的每个字符都是其自己的列表),所以:

Year,PID
2019,1
2018,2

还有

Y
e
a
r,
P
i
d
(etc)

有什么区别?

最佳答案

in-memory stream for text I/O

  • 需要注意的是that :

For strings StringIO can be used like a file opened in text mode

csv.reader将 StringIO(content) 视为打开文件。reader

a reader object which will iterate over lines in the given csvfile

  • 因此 lines = list(reader) 将返回 content 中的行列表

在第二种情况下,content 是字符串类型。

  • 因此 csv.reader(content) 将返回字符串上的迭代器。

这是because :

csv.reader(csvfile, dialect='excel', **fmtparams) csvfile can be any object which supports the iterator protocol and returns a string each time its next() method is called

  • 这就是 lines = list(reader) 返回字符列表的原因,因为它将 content 中的每个字符视为一行。

关于python 3 : urllib, csv reader和StringIO-为什么有区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com