从CSV文件中阅读,但不将单词标记为字母,将数字标记为数字

jhkqcmku  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(113)

我正在下载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文件到驱动器,然后打开它-一切正常工作。但我不想有这个额外的步骤。

wh6knrhe

wh6knrhe1#

请通过以下链接查看csv.reader的文档:
csv.reader(csvfile, dialect='excel', **fmtparams)
... csvfile可以是支持迭代器协议的任何对象,并且每次调用__next__()方法时都返回一个字符串--文件对象和列表对象都适用...
注意,变量content是一个字符串,而不是一个文件。在Python中,字符串可能是迭代器,但是它们的__next__()方法不会返回下一行。你可能想把长CSV字符串转换成一个 * 行列表 *。所以__next__()(当在reader函数内部调用时)将给予下一行而不是下一个字符。请注意,这就是为什么当您先将CSV保存到文件中时,代码会神秘地工作的原因--每次调用__next__()时,打开的文件迭代器都会返回下一行输入。
要完成此操作,请尝试使用以下行来代替第4行:

content = response.read().decode('utf-8').split("\n")

相关问题