Python读取CSV股票名生成URL后写入新CSV仅存最后一条如何解决
问题解决方案
错误原因
- 循环内的
urls_link变量每次迭代都会被新值覆盖,循环结束后仅存储最后一条生成的URL - 写文件的操作放在循环外,只会写入最终存储的最后一条URL
修正后的代码(推荐写法)
使用with上下文自动管理文件,无需手动调用close,稳定性更高:
# 先收集所有生成的URL urls = [] with open('names.csv', 'r', encoding='utf-8') as datafile: for line in datafile: # 先去除股票名的换行和空白,再拼接域名,避免URL带多余字符 stock_code = line.strip() if stock_code: # 跳过空行 urls_link = f'https://ceo.ca/{stock_code}\n' # 加换行符实现逐行写入 urls.append(urls_link) print(urls_link.strip()) # 统一写入文件 with open("url.csv", "w", encoding='utf-8') as f: f.writelines(urls)
可选写法:循环内逐行写入
适合处理数据量极大的场景,无需占用内存存储全量URL:
with open('names.csv', 'r', encoding='utf-8') as datafile, open("url.csv", "w", encoding='utf-8') as outfile: for line in datafile: stock_code = line.strip() if stock_code: urls_link = f'https://ceo.ca/{stock_code}' print(urls_link) outfile.write(urls_link + '\n')
注意说明
- 拼接URL前先对读取的行做
strip()处理,可以避免股票名带换行符导致生成的URL异常 - 写入时末尾加
\n可以保证每个URL单独占一行,符合CSV逐行存储的要求 - 显式指定
encoding='utf-8'可以避免不同系统下的编码兼容问题
内容的提问来源于stack exchange,提问作者Jeffery Li
相关产品推荐
相关产品推荐

