Python读取FTP中CSV文件及目录操作与Pandas直接加载方法
没问题,我来一步步帮你搞定这个需求!
操作FTP服务器:获取文件夹列表并切换目录
Python里用内置的ftplib库就能轻松搞定FTP操作,既然你已经成功连接服务器了,直接看后续步骤:
- 获取根目录下的文件夹列表:
ftp.nlst()会返回根目录的所有条目,但没法直接区分文件和文件夹,所以我们可以通过尝试切换目录的方式来筛选:
from ftplib import FTP # 假设你已经完成连接,比如:ftp = FTP('你的服务器地址', '用户名', '密码') all_items = ftp.nlst() folders = [] for item in all_items: try: # 尝试切换到该条目,成功就说明是文件夹 ftp.cwd(item) folders.append(item) # 切回根目录继续判断其他条目 ftp.cwd('..') except: # 切换失败,说明是文件,跳过 pass print("根目录下的文件夹:", folders)
- 进入指定文件夹:
直接用cwd命令就行,比如你要进入名为sales_data的文件夹,执行:
ftp.cwd('sales_data')
之后所有操作就会在这个文件夹下进行啦。
读取FTP上的CSV并加载到Pandas
完全可以直接加载到Pandas里,给你两种常用方案:
方案1:先下载到本地再读取
适合文件较大的场景,步骤直观:
import pandas as pd # 假设当前在目标文件夹,要读取monthly_sales.csv local_save_path = './monthly_sales.csv' with open(local_save_path, 'wb') as local_file: # 从FTP下载文件到本地 ftp.retrbinary('RETR monthly_sales.csv', local_file.write) # 加载到Pandas DataFrame df = pd.read_csv(local_save_path)
方案2:内存直接读取(无需本地存储)
更高效,不用占用本地磁盘空间,借助io.BytesIO做内存缓冲区:
import pandas as pd from io import BytesIO # 把CSV内容读取到内存缓冲区 csv_buffer = BytesIO() ftp.retrbinary('RETR monthly_sales.csv', csv_buffer.write) # 重置缓冲区指针到开头,不然Pandas读不到内容 csv_buffer.seek(0) # 直接加载到Pandas df = pd.read_csv(csv_buffer)
如果要批量处理文件夹里的所有CSV,还可以这么做:
# 获取当前目录下所有CSV文件 current_dir_items = ftp.nlst() csv_files = [file for file in current_dir_items if file.lower().endswith('.csv')] # 批量加载成DataFrame列表 df_collection = [] for csv_file in csv_files: buffer = BytesIO() ftp.retrbinary(f'RETR {csv_file}', buffer.write) buffer.seek(0) df = pd.read_csv(buffer) df_collection.append(df) # 要是需要合并所有数据 combined_df = pd.concat(df_collection, ignore_index=True)
小提醒
- 确保你的FTP账号有文件读取权限,不然会触发权限错误。
- 如果CSV文件有特殊编码(比如GBK),记得在
pd.read_csv里加上encoding='gbk'参数。 - 超大文件建议用方案1,避免内存过载。
内容的提问来源于stack exchange,提问作者Harikrishna
相关产品推荐
相关产品推荐

