You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取URL获取的CSV时内容被拆分为单个字符的问题

解决CSV在线读取时内容被拆分为单个字符的问题

使用Python 3.10通过以下代码从指定URL读取CSV文件时,除"1 Mo""3 Mo"这类内容外,其余文字和数字均被拆分为单个字符:

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)

目标URL:

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"

输出示例(仅截取部分):

['D']
['a']
['t']
['e']
['','']
['1 Mo']
['','']
['2 Mo']
['','']
['3 Mo']
['','']
...
['30 Yr']
[]
['1']
['1']
['/']
['0']
['8']
['/']
...

直接将文件保存到本地后读取一切正常,无需本地保存的解决方法如下:

问题原因

csv.reader 要求传入的是按行迭代的对象(比如文件对象),而直接传入字符串时,它会将字符串视为字符序列,逐个字符作为"行"来解析,导致内容被拆分为单个字符。

解决方案

使用 io.StringIO 将解码后的字符串包装成类文件对象,让 csv.reader 可以按正确的行来解析:

from urllib.request import urlopen
import csv
import io

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"
response = urlopen(url)
content = response.read().decode('utf-8')
# 用StringIO模拟文件对象,按行迭代内容
csv_data = csv.reader(io.StringIO(content), delimiter=',')
for row in csv_data:
    print(row)

io.StringIO 会把字符串转换成类似文本文件的可迭代对象,csv.reader 就能正确识别每行数据,避免单个字符拆分的问题。

内容的提问来源于stack exchange,提问作者user3151858

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:41:17