Python读取从FTP下载的CSV文件无法读取全部行如何解决?
根因分析
行缺失的核心原因是下载文件后未关闭本地文件对象,写入的数据仍滞留在系统缓冲区未完全落盘,此时直接调用pandas读取只能拿到部分数据。
修复后代码
import ftplib import pandas as pd import os # FTP连接配置 ftp = ftplib.FTP('IP', 'username','password') # 切换到目标目录 ftp.cwd("Folder_Name") # 筛选所有csv文件 names = ftp.nlst() final_names= [line for line in names if '.csv' in line] # 取最新修改的csv文件 latest_time = None latest_name = None for name in final_names: time1 = ftp.sendcmd("MDTM " + name) if (latest_time is None) or (time1 > latest_time): latest_name = name latest_time = time1 # 用with上下文管理器自动关闭文件,确保所有内容写入磁盘 with open(latest_name, 'wb') as file: ftp.retrbinary('RETR '+ latest_name, file.write) # 可选校验:确认文件下载完整 ftp_file_size = ftp.size(latest_name) local_file_size = os.path.getsize(latest_name) if ftp_file_size != local_file_size: raise Exception(f"文件传输不完整,服务端大小{ftp_file_size}字节,本地大小{local_file_size}字节") # 读取完整文件 dat = pd.read_csv(latest_name) # 主动关闭FTP连接释放资源 ftp.quit()
其他排查点
如果调整后仍存在行缺失,可检查以下配置:
- 确认服务端源CSV文件本身无损坏、行数确实为3072行
- 若CSV存在非标准换行符、特殊编码,可给
pd.read_csv增加encoding、lineterminator参数适配
内容的提问来源于stack exchange,提问作者Pooja Bhateley
相关产品推荐
相关产品推荐

