我正在下载csv文件,然后用csv模块阅读它。由于某种原因,单词和数字被标记为字母和单个数字。但是,有例外,“1 Mo”,“3 Mo”等。
我从这里得到csv文件:
url = https://home.treasury.gov/resource-center/data-chart-center/interest-rates/daily-treasury-rates.csv/2022/all?type=daily_treasury_yield_curve&field_tdr_date_value=2022&page&_format=csv
我使用Python 3.10,代码如下所示:
from urllib.request import urlopen
import csv
response = urlopen(url)
content = response.read().decode('utf-8')
csv_data = csv.reader(content, delimiter=',')
for row in csv_data:
print(row)
这是我得到的:
['D']
['a']
['t']
['e']
['','']
['1 Mo']
['','']
['2 Mo']
['','']
['3 Mo']
['','']
.
.
.
['30 Yr']
[]
['1']
['1']
['/']
['0']
['8']
['/']
.
.
.
我尝试了不同的分隔符,但它没有帮助。
**P.S.**当我简单地保存csv文件到驱动器,然后打开它-一切正常工作。但我不想有这个额外的步骤。
1条答案
按热度按时间wh6knrhe1#
请通过以下链接查看
csv.reader
的文档:csv.reader(csvfile, dialect='excel', **fmtparams)
...
csvfile
可以是支持迭代器协议的任何对象,并且每次调用__next__()
方法时都返回一个字符串--文件对象和列表对象都适用...注意,变量
content
是一个字符串,而不是一个文件。在Python中,字符串可能是迭代器,但是它们的__next__()
方法不会返回下一行。你可能想把长CSV字符串转换成一个 * 行列表 *。所以__next__()
(当在reader
函数内部调用时)将给予下一行而不是下一个字符。请注意,这就是为什么当您先将CSV保存到文件中时,代码会神秘地工作的原因--每次调用__next__()
时,打开的文件迭代器都会返回下一行输入。要完成此操作,请尝试使用以下行来代替第4行: